2016-10-29 3 views
0

VBA에서 초보자이거나 그 문제에 대해 코딩하는 것을 스스로 말합니다.Excel VBA ActiveX 콤보 상자 변경 이벤트 무한 루프

나는 "비용"이라는 워크 시트에 사용자 폼이 아닌 "cmbStyle"이라는 콤보 박스를 가지고 있습니다. "cmbStyle"변경 이벤트에 대한 코드를 실행해야합니다. 내가 가진 문제는 사용자가 콤보 상자를 변경하면 이벤트가 발생하고 코드가 실행되지만 코드 끝에 콤보 상자 이벤트가 다시 발생한다는 것입니다.

저는 Application.EnableEvents = False가 ActiveX 컨트롤에 영향을 미치지 않으므로 해결책이 아님을 알고 있습니다.

부울 변수를 사용하여 목록 상자의 변경 이벤트에서 반복을 중지하는 방법에 대한 설명을 찾았지만 내 인스턴스에서 작동하지 못하는 것 같습니다.

Cange 이벤트가 두 번째 발생하면 내 코드에서 서브 루틴을 종료합니다. 그러나 다음에 사용자가 Combobox에서 다른 값을 선택하면 CodeDoneRun 변수가 여전히 TRUE가되어 필요할 때 서브 루틴이 다시 실행되지 않습니다. 다음과 같이

내가 여기 아주 기본적인 뭔가를 놓친 거지 느낌이

....

내 코드는 다음과 같습니다

Public CodeDoneRun as Boolean 

Private Sub cmbStyle_Change() 
    If CodeDoneRun = True Then Exit Sub 

    CodeDoneRun = True 

    Call other Subroutines 

End Sub 
+0

'다른 서브 루틴 호출'후에 다시 진입 플래그를 false로 설정해야합니다. – Comintern

답변

0

는 if 문에서 함수 호출을 묶고 통해 코드 실행을 할 수 있습니다.

Public CodeDoneRun as Boolean 

Private Sub cmbStyle_Change() 
    If Not CodeDoneRun Then 
     Call other Subroutines 
    End If 

    CodeDoneRun = Not CodeDoneRun 

End Sub