2012-03-26 2 views
1

콤보 상자에 바인딩 할 데이터가 포함 된 XML이 표시됩니다. 콤보 상자에 항목이 추가 될 때마다이 데이터를 바인딩하는 동안 해당 변경 이벤트가 발생합니다. 데이터가 바인딩되고 사용자가 항목을 선택한 후에 만 ​​변경 이벤트를 발생시키고 싶습니다.콤보 상자 변경 이벤트가 매번 Excel VBA에서 실행 중임

이 문제를 해결할 수있는 도움이 되셨습니까?

답변

1

이벤트를 처리할지 여부를 나타내는 플래그를 사용하십시오.

0

콤보 상자의 값이 null이 아닌 경우 항목의 콤보 상자 목록을 변경할 때 내 경험에 의하면 콤보 상자 변경 이벤트는 발생합니다. 처음으로 콤보 상자를 초기화 할 때이 문제가 발생하면 콤보 상자를 채울 때까지 기본값을 할당하지 마십시오.

Alex K가 말한 것처럼 다른 시간에 콤보 상자 목록을 변경해야하는 경우 변경 이벤트를 무시할지 여부를 나타내는 부울 플래그를 만듭니다.

콤보 상자를 채우거나 각 .AddItem에 한 번씩 변경 이벤트가 발생하는 경우 귀하의 질문에 분명하지 않습니다. 후자의 문제 인 경우 콤보 상자의 값 배열을 만들고 콤보 상자의 .List에 할당하여 변경 이벤트 수를 줄일 수 있습니다.

다음은 모든 열린 통합 문서의 이름과 경로로 콤보 상자를 채우는 2 차원 배열의 예입니다. (1 차원 배열도 가능합니다.)

Private Sub InitializeComboBox() 
    Dim aList() As String 
    Dim i As Integer, iMax As Integer 

    ' build combobox list with zero-based array 
    iMax = Application.Workbooks.Count - 1 
    ReDim aList(iMax, 2) 
    For i = 0 To iMax 
     With Application.Workbooks(i + 1) 
     aList(i, 0) = i 
     aList(i, 1) = .Name 
     aList(i, 2) = .Path 
     End With 
    Next i 

    With Me.ComboBox1 
     .ColumnCount = 3 
     .ColumnWidths = "0 pt;80 pt;220 pt" 
     .ListWidth = "300 pt" 
     .List = aList 
    End With 
End Sub