VBA如何以编程方式选择列表框中的项目而不触发单击事件

VBA如何以编程方式选择列表框中的项目而不触发单击事件,vba,excel-2010,activex,Vba,Excel 2010,Activex,我正在使用Excel 2010、Windows 10和VBA。我有一个函数,它在单击ActiveXListBox控件中的项目时运行。问题是,如果单击列表框,我会询问他们是否确定是否要更改选择。如果您单击“是”,我将继续,但如果您说“否”,我会将选择设置回以前的状态 所以问题是,当我以编程方式将列表框选择设置回上一个选择时,如果用户单击列表框中的某个项目,我的函数将重新运行运行代码……这是我不想要的 lsBox.Selected(I) = True 是否有人有更好的方法停止列表框选择并将其更改回

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

所以问题是,当我以编程方式将列表框选择设置回上一个选择时,如果用户单击列表框中的某个项目,我的函数将重新运行运行代码……这是我不想要的

lsBox.Selected(I) = True
是否有人有更好的方法停止列表框选择并将其更改回旧的列表框选择,而不触发列表框上的选择事件

单击列表框的功能原型

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,调用偶数/子,将其设置回false

blnChangingInCode = True
btnLogin_Click()
blnChangingInCode = False
在受影响的潜艇/事件中,我从

If blnChangingInCode Then
    Exit Sub ' or Exit Function
End if

这可能并不优雅,但它可以工作,我不需要经常这样做。

尝试在函数开始时添加Application.EnableEvents=False,然后在结束时将其设置回true。将其设置为真是非常重要的@sous2817
应用程序。EnableEvents
控制Excel
工作表
工作簿
事件,它与列表框的ActiveX处理程序没有关系。
MsgBox
提示符在哪里?我在问题\u单击中有一个名为checkChangeQuestion的函数。checkChangeQuestion将提示用户检查我是否应该给用户警告,然后处理yes或no。我强烈建议不要像这样调用事件处理程序。事件处理程序由事件源period调用。从中提取一个方法,使处理程序调用该方法,然后调用该提取的方法。不要调用事件处理程序。事件处理程序处理事件,它们是实现细节,而不是公共接口。另外,括号是多余的,如果有参数要传递,实际上是有害的。问题是我没有调用click事件。当我在列表框“lsBox.Selected(I)=True”上设置选择时,它似乎被调用。这似乎是触发我的单击事件的原因