VBA 如何在不触发单击事件的情况下以编程方式 select 列表框中的项目

VBA How to programaticly select an item in a listbox without triggering the on click event

我正在使用 Excel 2010,Windows 10,VBA。我有一个函数,在单击 ActiveX ListBox 控件中的项目时 运行s。问题是,如果您单击列表框,我会询问他们是否确定要更改选择。如果您单击 "yes",我会继续,但如果您单击 "no",我会将选择设置回之前的状态。

所以问题是,当我以编程方式将列表框选择设置回之前的选择时,如果用户单击列表框...这是我不想要的。

有没有人有更好的方法来停止列表框选择并将其更改回旧列表框而不导致触发列表框选择事件?

单击列表框的函数原型

lsQuestions_Click()

设置列表框选择的代码

'Prototype: setListBoxSelection(query As String, listBoxName As String) As Boolean
'  Purpose: Set listbox selection based on text
Public Function setListBoxSelection(query As String, listBoxName As String) As Boolean
  Dim lsBox As MSForms.listBox
  Set lsBox = Workbooks(mainFile).Worksheets(entrySheet).OLEObjects(listBoxName).Object

  Dim I As Integer

  For I = 0 To lsBox.ListCount - 1
      If lsBox.List(I) = query Then
          lsBox.Selected(I) = True
          setListBoxSelection = True
          Exit Function
      End If
  Next I

  setListBoxSelection = False
End Function

请注意,我认为下面的代码行触发了我不想要的点击事件。

lsBox.Selected(I) = True

我对我的 VB6 项目执行此操作的方法是定义一个模块范围变量

Private blnChangingInCode As Boolean

然后,当我需要使用它时,我将它设置为true,调用even/sub,将它设置回false。

blnChangingInCode = True
btnLogin_Click()
blnChangingInCode = False

在受影响的内部 subs/events 我从

开始
If blnChangingInCode Then
    Exit Sub ' or Exit Function
End if

这可能不太优雅,但它确实有效,而且我不需要经常这样做。