【问题标题】:combobox change event is firing every time in excel VBA在excel VBA中每次都会触发组合框更改事件
【发布时间】:2016-10-24 00:33:39
【问题描述】:

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

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

【问题讨论】:

    标签: excel vba vbscript


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 2014-07-28
        • 1970-01-01
        • 2017-03-12
        • 2021-02-15
        • 1970-01-01
        相关资源
        最近更新 更多