2016-06-23 2 views
0

instruction과 같은 드롭 다운 목록을 만들었습니다. 이제이 셀을 내 매크로에서 트리거해야합니다.셀의 VBA 트리거 변경

가 이미이 주제에 다른 항목의 일부를 읽을 수 있지만 내 VBA 엑셀 매크로이 코드에서 작동하지 않습니다

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$2" Then 
    Call Macro1 
    End If 
End Sub 

Sub Macro1() 
    MsgBox "The value entered in Range B2 is " & Range("B2").Value 
End Sub 

을 나는 셀 B2의 값을 변경하는 경우,이 코드는 '아무튼 실행되지 않고 아무 메시지 상자도 표시되지 않습니다.

+0

"작동하지 않음"이란 의미를 설명해주십시오. – DeanOC

+1

둘 다 어디에 있습니까? 올바른 시트가 사용 되었습니까? Macro1 사용할 수 있습니다, 그것은 나를 위해 잘 작동합니다. –

답변

1

코드를 복사하여 편집중인 시트에 넣었습니다. 정상적으로 작동합니다. 이 코드를 다른 위치에 넣으려고하면 ThisWorkbook에 추가하면 이벤트 핸들러 Worksheet_Change가 실행되지 않으므로 작동하지 않습니다.

+0

내 코드가 ThisWorkbook에있었습니다 .. 덕분에 많은 시간을 절약 할 수있었습니다! – ZerOne

1

위의 대답 외에도 병합 된 셀이고 b2가 병합의 첫 번째 셀이 아니라면이 또한 작동하지 않습니다. 그러나 그것이 사실이 아니며 올바른 위치에 코드가 있다면 잘 작동합니다.

0

범위 값을 변경하려는 경우 EnableEvents를 선택하고 전환하십시오. 재귀 적으로 Worksheet_Change를 실행하고 프로젝트를 중단 할 위험이 있습니다. 여기


는 일반적인 디자인 패턴을이다

  • 끕니다 enableEvents를
  • 대상 (변경된 셀) 다른 매개 변수로
  • 패스 대상의 유효성을 검사하는 범위에있는 경우
  • 확인 enableEvents를에 서브 루틴
  • 전원을 켜고
 
Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 

    If Not Intersect(Target, Range("B:B")) Is Nothing Then 
     Macro1 Target 
    End If 

    Application.EnableEvents = True 
End Sub 

Sub Macro1(Target As Range) 
    MsgBox "The value entered in Range " & Target.Address(True, True) & " is " & Target.value, vbInformation, "You Entered" 
End Sub