我得到一个XML,其中包含要绑定到组合框的数据。在每次将某个项目添加到组合框时绑定此数据时,将触发其更改事件。我只想在数据绑定和用户选择任何项目后触发更改事件。组合框更改事件每次都在Excel中触发VBA
任何帮助,可以解决这个问题的代码?
我得到一个XML,其中包含要绑定到组合框的数据。在每次将某个项目添加到组合框时绑定此数据时,将触发其更改事件。我只想在数据绑定和用户选择任何项目后触发更改事件。组合框更改事件每次都在Excel中触发VBA
任何帮助,可以解决这个问题的代码?
使用标志来指示您是否要处理事件;
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
在我的经验中,组合框更改事件只是改变项目的组合框列表时,如果组合框的值不为空火灾。如果第一次初始化组合框时发生此问题,则在填充组合框之前不要指定默认值。
如果您需要在其他时间更改组合框列表,如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