2012-12-23 6 views
0

나는 누군가가 나를 도울 수 있는지 궁금해.기본값 드롭 다운 목록에서

나는 아래에있는 코드를 사용하고 있습니다. 수행중인 여러 작업 중에서 날짜가 "A"로 채워지고 새 레코드가 만들어 질 때 텍스트 값이 "아니요"인 열 "AS"가 자동으로 채워집니다 엑셀 스프레드 시트. 내가 날짜 열 "A"에 삽입 할 때입니다 가능하다면, 어떻게하고 싶은 무엇

Option Explicit 
Public preValue As Variant 
Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim Cell As Range, res As Variant 
    Dim rCell As Range 
    Dim Rng1 As Range 
    Dim Rng2 As Range 
    Dim Rng3 As Range 


    Application.EnableCancelKey = xlDisabled 
    'Sheets("Input").Protect "handsoff", UserInterFaceOnly:=True, AllowFiltering:=True, AllowFormattingColumns:=True 

    If Target.Column = 3 Then 
     If Target = "No" Then MsgBox "Please remember to make the same change to all rows for " & Target.Offset(0, -1).Value & " and delete any future forecasts" 
    End If 

     If Target.Cells.Count > 1 Then Exit Sub 
    On Error Resume Next 

    If Not Intersect(Target, Range("B5:AD400", "AF5:AQ400")) Is Nothing Then 
     If Target.Value <> preValue And Target.Value <> "" Then 
      Application.EnableEvents = False 
      With Rows(Target.Row) 
        .Range("A1").Value = Date 
        .Range("AS1").Value = "No" 
     End With 
      Application.EnableEvents = True 
      Target.Interior.ColorIndex = 35 
     End If 
    End If 

    On Error GoTo 0 
    If Target.Column = 45 Then 
       If Target.Value = "Yes" Then 
       Set Rng1 = Application.Union(Cells(Target.Row, "B").Resize(, 19), Cells(Target.Row, "R")) 
       Rng1.Interior.ColorIndex = xlNone 
       Set Rng2 = Application.Union(Cells(Target.Row, "S").Resize(, 12), Cells(Target.Row, "AD")) 
       Rng2.Interior.ColorIndex = 37 
       Set Rng3 = Application.Union(Cells(Target.Row, "AF").Resize(, 12), Cells(Target.Row, "AQ")) 
       Rng3.Interior.ColorIndex = 42 
       End If 
    End If 

    If Not Intersect(Target, Range("J7:J400")) Is Nothing Then 
     Set Cell = Worksheets("Lists").Range("B2:C23") 
     res = Application.VLookup(Target, Cell, 2, False) 
    If IsError(res) Then 
     Range("K" & Target.Row).Value = "" 
    Else 
     Range("K" & Target.Row).Value = res 
    End If 
    End If 

End Sub 

, 내가 열에서 같은 행의 "선택"텍스트 값을 삽입하려는 "기음". 이 값은 드롭 다운 메뉴에있는 첫 번째 값에서 가져온 것으로 "RDStaff"라는 이름의 범위가있는 "목록"이라는 시트에 설정됩니다.

누군가가 아마도 기능 변경에 대해 어떻게 생각하는지 말해 주시겠습니까? "A"열에 날짜가 입력되면 내 목록의 첫 번째 값 즉 "Select"가 자동으로 열 " 기음"?

많은 감사와 종류

에 관하여 크리스

+0

'행 (Target.Row). 범위 ("C1"). 값 = "선택"- 필요한 것이 전부가 아닙니까? – mattboy

+0

안녕하세요 @ mattboy, 내 게시물에 회신하는 시간을내어 주셔서 감사합니다. 나는 이것을 시도했지만, 내가 가진 문제는 사용자가 드롭 다운 메뉴에서 "선택"으로 돌아 가지 않고 값을 선택할 수 없다는 것입니다. 많은 감사와 친절 감사합니다 – IRHM

답변

1

이 열 C의 셀 유효성 검사 목록에서 사용되는 위치를 정확히하는 명확하지 않다, 그러나 당신은 당신의 문을과에 아래 코드를 추가하는 경우 물론 적절한 드롭 다운 셀을 조정해야합니다.

.Range("C1").Value = Sheets(1).Range("C10").Value

자,이 세포 C10에서 (인덱스) 통합 문서의 첫 번째 시트에 유효성 검사에 따라 목록 아래로 드롭을 가정합니다. 데이터/통합 문서 구조에 맞게 조정해야합니다.

핵심은 값을 하드 코딩하지 않는다는 것입니다. 드롭 다운 목록 위치에서 값을 참조합니다.

귀하의 의견에 따라 코드에 유효성 검사 목록을 추가하는 코드 스 니펫이 있습니다.

With Rows(Target.Row) 

    '... your existing code 
    With Range("C1").Validation 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Lists!RDStaff ' you may need to make this named range global for it to work on another sheet in this context 
     .IgnoreBlank = True 
     .InCellDropdown = True 
    End With 

End WIth 
+0

안녕하세요 @ 스콧 홀츠 먼, 내 게시물에 회신하는 시간을내어 주셔서 감사합니다. 나는 어디에서 변화를 할 지 모르겠다. 그러나 이것은 내 게시물에 많은 내용을 제공하지 않았기 때문에 이것은 내 잘못입니다. 내 첫 글에는 내 전체 스크립트가 포함되어 있습니다. 'Date'가 row7에서 시작하는 열 "A"의 셀을 자동으로 채울 때 "C"열의 셀에 텍스트 값 "Select"를 표시하고 싶습니다. 이 값은 이름이 "RDStaff"인 "목록"이라는 시트에 설정된 드롭 다운 메뉴의 첫 번째 값입니다. 이게 도움이 되길 바란다. 많은 감사와 친절한 답변 – IRHM

+0

@IRHM - 전체 드롭 다운 유효성 검사를 C 열에 적용 하시겠습니까? 사용자가 원하는대로 선택할 수 있습니다 ... 그러나 드롭 다운이 있음을 알 수 있도록 선택 단어가 나타나기를 원하십니까? –

+0

안녕하세요 @ 스콧 홀츠 먼, 이렇게 빨리 내게 다시와 주셔서 감사합니다. 입력 범위는 7에서 400까지입니다. 그래서 예를 들어 사용자가 "B7"셀에 이름을 입력하면 드롭 다운 메뉴에서 두 개의 다른 값을 선택할 수있는 "Select"라는 단어를 "C7"에 표시하고 싶습니다. 예 "Yes"또는 " 아니". 사용자가 "B100"에 이름을 입력하면 동일하게 적용됩니다. 셀 "C100"과 같은 단어를 선택하고 싶습니다. 도움이 되었기를 바랍니다. 많은 감사와 친절한 안부. – IRHM