2017-12-26 17 views
1

시트에 여러 개의 드롭 다운 목록이있어 사용자가 유효성 검사를 거친 필드 내에 여러 개의 선택을 입력해야하는 경우가 있습니다. 즉, 때로는 사과 이외에 오렌지가 더 필요합니다. 데이터 유효성 검사 필드는 사과/오렌지입니다.Excel의 데이터 유효성 검사 필드에 여러 항목 선택하기

이 코드는 최근까지 작동했는데 어떤 이유로 작동하지 않습니다. 코드가 시트가 아닌 특정 시트에서 작동하도록 모듈에없는 "시트"에 있습니다.

시트에 영향을 미칠 수있는 사양은 다음과 같습니다. 매크로가 잠겨 있습니다 (매크로를 잠그지 않고 시도했지만 수정하지 않았습니다). 동일한 통합 문서에는 비슷한 코드를 가진 두 개의 시트가 있습니다 (다른 시트에서 스크립트를 삭제하려고 시도했지만 수정하지 않았습니다). 밖에있는 다른 질문 하나가 있습니다.이 질문에 대한 답변은 거의 없지만 잘하면 "이 코드가 작동했다는 것을 알면서도"지금 누군가가 나를 체크 아웃 할 수는 없습니다.

Private Sub Worksheet_Change(ByVal Target As Range) 
'Code by Sumit Bansal from https://trumpexcel.com 
' To Select Multiple Items from a Drop Down List in Excel 
Dim Oldvalue As String 
Dim Newvalue As String 
Application.EnableEvents = True 
On Error GoTo Exitsub 
If Target.Column = 2 And Target.Row > 11 And Target.Row < 27 Then 
    If Target.SpecialCells(xlCellTypeAllValidation) 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 
      If InStr(1, Oldvalue, Newvalue) = 0 Then 
       Target.Value = Oldvalue & "/" & Newvalue 
      Else: 
       Target.Value = Oldvalue 
      End If 
     End If 
    End If 
End If 
+0

정확히 그대로 사용 했습니까? 당신의'If/Else' 진술은 실제로 관습을 따르지 않습니다 - 실제로 예상대로 작동합니까? – BruceWayne

+0

@ BruceWayne 그것은 브루스가 작동하고 논리가 아프다. :). 나는 한 줄씩 코드를 돌릴 때까지 논리를 얻지 못했다. 바보 나. – L42

답변

0

귀하의 문제는 사용 중지 및 이벤트 사용에 있다고 생각합니다.
코드를 리팩터링했는데 정상적으로 작동합니다. 아래 참조 :

Private Sub Worksheet_Change(ByVal Target As Range) 
'Original Code by Sumit Bansal from https://trumpexcel.com 
'To Select Multiple Items from a Drop Down List in Excel 

'Refactored error handling... 
    On Error GoTo halt 
    Dim Oldvalue As String, Newvalue As String 
    Application.EnableEvents = False '/* disable events here */ 
    If Target.Column = 2 And Target.Row >= 11 And Target.Row <= 27 Then 
     If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then 
      'GoTo ExitSub 
     Else 
      If Target.Value = "" Then GoTo ExitSub 
      Newvalue = Target.Value: Application.Undo 
      Oldvalue = Target.Value 
      If Oldvalue = "" Then 
       Target.Value = Newvalue 
      Else 
       If InStr(1, Oldvalue, Newvalue) = 0 Then 
        Target.Value = Oldvalue & "/" & Newvalue 
       Else 
        Target.Value = Oldvalue 
       End If 
      End If 
     End If 
    End If 

ExitSub: 
    Application.EnableEvents = True '/* enable before exit */ 
    Exit Sub 
halt: 
    '/* handle error and communicate to user */ 
    MsgBox "Opps, encountered error but dismissed it. See details below:" & _ 
    vbNewLine & Err.Number & ": " & Err.Description 
    Err.Clear '/* clear the error */ 
    Resume ExitSub '/* make sure to re-enable events */ 
End Sub 

또한 관련이없는 코드도 제거했습니다. HTH.