2012-03-26 168 views
1

我得到一个XML,其中包含要绑定到组合框的数据。在每次将某个项目添加到组合框时绑定此数据时,将触发其更改事件。我只想在数据绑定和用户选择任何项目后触发更改事件。组合框更改事件每次都在Excel中触发VBA

任何帮助,可以解决这个问题的代码?

回答

1

使用标志来指示您是否要处理事件;

private mblIsUpdating as boolean 
... 
sub addDataFromXml 
    mblIsUpdating = true 
    combo.additem ... 
    mblIsUpdating = false 
end sub 

sub combo_change 
    if (mblIsUpdating) then exit function 
    //handle change 
end sub 
0

在我的经验中,组合框更改事件只是改变项目的组合框列表时,如果组合框的值不为空火灾。如果第一次初始化组合框时发生此问题,则在填充组合框之前不要指定默认值。

如果您需要在其他时间更改组合框列表,如Alex K说的,请创建一个布尔标志来指示是否要忽略更改事件。

我不清楚你的问题,如果更改事件是一次触发一次,当你填充组合框或每个.AddItem一次。如果是后一个问题,则可以通过为您的组合框创建一组值并将其分配给组合框的.List来减少更改事件的数量。

下面是一个2-d数组示例,它使用所有打开的工作簿的名称和路径填充组合框。 (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 
相关问题