组合框更改事件每次都在excel VBA中触发

时间:2012-03-26 10:40:42

标签: excel vba vbscript

我得到的XML包含要绑定到组合框的数据。每次将项目添加到组合框时绑定此数据,都会触发其更改事件。我想在绑定数据并且用户选择任何项目后才触发更改事件。

任何可以解决此问题的帮助代码?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

根据我的经验,如果组合框的值不为空,则仅在更改组合框项目列表时才会触发组合框更改事件。如果在首次初始化组合框时发生此问题,请在填充组合框之前不要指定默认值。

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

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

这是一个带有2-d数组的示例,该数组使用所有打开的工作簿的名称和路径填充组合框。 (一维数组也有效。)

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