2016-07-19 4 views
0

열 머리글이 시간 간격이고 행 머리글이 사람 이름 인 테이블이있는 Excel 워크 시트가 있습니다. 가운데의 각 셀에는 드롭 다운 목록이 있습니다. 사용자가 각 셀의 드롭 다운에서 하나 이상의 옵션을 선택할 수 있도록 아래 코드를 입력했습니다.데이터 유효성 검사 코드 : 대상 범위 지정

코드가 제대로 작동하지만 전체 시트가 대상 범위가 아닌 시트의 영향을받습니다. 예를 들어 셀의 백 스페이스를 누르고 새 텍스트를 입력하여 열 머리글의 셀을 편집하려고하면 "6:30 am, 7:30 am"또는 "old value, new value "

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
' To Select Multiple Items from a Drop Down List in Excel 

    Dim Oldvalue As String 
    Dim Newvalue As String 

On Error GoTo Exitsub 
If Target.Range("E10:V600") Is Nothing Then 
GoTo Exitsub 
Else: If Target.Value = "" Then GoTo Exitsub Else 
    Application.EnableEvents = False 
    Newvalue = Target.Value 
    Application.Undo 
    Oldvalue = Target.Value 
    If Oldvalue = "" Then 
     Target.Value = Newvalue 
    Else 
     Target.Value = Oldvalue & ", " & Newvalue 
End If 
End If 
Application.EnableEvents = True 

Exitsub: 
Application.EnableEvents = True 

End Sub 

내가 바로 그때 편집 다시 셀을 클릭하면 셀을 종료, 명확한 내용을 치고, 셀을 클릭하여이 문제를 피할 수 있습니다. 하지만이 문제를 방지하고 싶습니다. 내 코드가 어디에 잘못 되었습니까? 대상 범위는 작업 할 코드가 필요한 정확한 셀 범위입니다. 도움을 주셔서 미리 감사드립니다.

답변

0

다음 줄 : If Target.Range("E10:V600") Is Nothing Then은 올바른 구문이 아닙니다. 또는 구문을 컴파일 할 수도 있지만 원하는 결과를 생성하지는 않습니다. 이것에

변경을 : If Not Instersect(Target, Me.Range("E10:V600")) Is Nothing Then

그래서 전체 코드가된다

Private Sub Worksheet_Change(ByVal Target As Range) 
    ' To Select Multiple Items from a Drop Down List in Excel 

    Dim Oldvalue As String 
    Dim Newvalue As String 

    If Not Instersect(Target, Me.Range("E10:V600")) Is Nothing Then 

     If Len(Target.Value) Then 

      Application.EnableEvents = False 
      Newvalue = Target.Value 

      Application.Undo 

      Oldvalue = Target.Value 

      If Oldvalue = "" Then 
       Target.Value = Newvalue 
      Else 
       Target.Value = Oldvalue & ", " & Newvalue 
      End If 

      Application.EnableEvents = True 

     End If 

    End If 

End Sub 
+0

명시 ption 나는 또한 '개인 서브 Worksheet_Change (ByVal의 다른 이름으로 대상 범위)'변경해야합니까? – SRag

+0

@SRag - 내 전체 코드 편집 –

+0

을 읽어 주셔서 감사합니다. 이제 지정된 범위 내에서 내용을 지우거나 백 스페이스를 눌러 셀을 지울 수 없습니다. 대신 셀을 지우려고 할 때마다 셀이 "오래된 값"으로 서식을 지정합니다. 이 문제가 해결 되었습니까? – SRag