2016-07-21 4 views
0

Excel에서 VBA의 userform에 두 개의 다중 선택 목록 상자가 있습니다.VBA에서 (Excel에서) 프로그래밍 방식으로 변경하는 목록 상자와 클릭 할 때를 구분하는 것

하나는 국가를 포함하고 다른 하나는 도시를 포함합니다.

사용자가 국가를 클릭하고 선택/선택 해제하면 두 번째 목록 상자에서 해당 국가에있는 모든 도시를 자동으로 선택/선택 취소합니다.

마찬가지로 사용자가 도시를 클릭하고 선택/선택 취소하면 첫 번째 목록 상자가 자동으로 업데이트되어 모든 해당 도시가 현재 선택된 국가 만 강조 표시됩니다.

내 문제는 다음과 같습니다

OnChange 이벤트를 사용하여 (의 OnClick 다중 선택리스트 박스와 함께 사용할 수 없습니다), 때마다 두 목록 상자가 변경 될 때, 그것은 다른 변경됩니다.

이 문맥에서 이것은 국가가 변경 될 때마다 두 번째 목록 상자에서 모든 해당 도시를 변경한다는 것을 의미합니다. 각 국가별로 사용자는 모든 도시를 선택하거나 실제로 선택하지 않습니다.

목록 상자가 사용자 또는 스크립트에 의해 변경되는지 여부를 알려주고 있습니까? 그렇지 않다면 내 목표를 달성 할 수있는 대체 방법이 존재합니까?

읽어 주셔서 감사합니다.

+0

사용'Application.EnableEvents = FALSE '일시적으로 해제하는 방법 OnChange, 변경 한 다음 다시 True로 설정하십시오. 이렇게하면 편집 작업을 수행하는 동안 다른 OnChange 이벤트가 트리거되지 않습니다. – Mikegrann

+0

'Application.EnableEvents = False'는 UserForm 이벤트에 영향을 미치지 않습니다. – cyboashu

답변

0

Application.EnableEvents는 UserForm 개체에 영향을 미치지 않습니다.

폼의 이벤트 상태를 저장하고 조작하기 위해 양식 범위 변수가 필요합니다 (가장 좋은 방법은 사용자 지정 속성 추가).

이 예제를 참조하십시오이 함께 코드를 다시 작동이 예 확인란입니다하지만 같은 논리가리스트 박스를 적용, 콤보 상자 등 ...

'/ UserForm with 2 CheckBoxes : CheckBox1 and CheckBox2 
Private m_bEvents   As Boolean 

Public Property Let EnableFormEvents(bVal As Boolean) 
    m_bEvents = bVal 
End Property 

Public Property Get EnableFormEvents() As Boolean 
    EnableFormEvents = m_bEvents 
End Property 

Private Sub CheckBox1_Click() 

    '/ Custom Event Status 

    Me.EnableFormEvents = False 
     Me.CheckBox2 = Me.CheckBox1 
    Me.EnableFormEvents = True 

End Sub 

Private Sub CheckBox2_Click() 

     If Me.EnableFormEvents Then 
      MsgBox "Check box clicked by user." 
     Else 
      MsgBox "Check box clicked by code." 
     End If 
End Sub 
+0

친절하게 도움을 주셔서 감사합니다.이게 내 문제를 해결했습니다. 카르마가 당신에게 관대 한 보상을 주길 바랍니다. 소원에 감사드립니다. – Joe

+0

. :) – cyboashu