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

时间:2018-10-03 16:52:03

标签: vba excel-2010 activex

我正在使用带有VBA的Excel 2010,Windows 10。我有一个功能,该功能可以在ActiveX ListBox控件中单击某个项目后运行。问题是,如果您单击列表框,我会问他们是否确定他们是否要更改选择。如果您单击“是”,我会继续,但是如果您说“否”,我会将选择恢复到以前的状态。

所以问题是,当我以编程方式将列表框选择设置回先前的选择时,如果用户单击列表框中的项目,则我的函数将重新运行运行的代码...这是我不希望的。不想。

有人能更好地停止列表框选择并将其更改回旧列表而不触发列表框选择事件吗?

用于单击列表框的功能原型

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

1 个答案:

答案 0 :(得分:1)

我在VB6项目中执行此操作的方法是定义一个模块作用域变量

Private blnChangingInCode As Boolean

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

blnChangingInCode = True
btnLogin_Click()
blnChangingInCode = False

在受影响的子对象/事件中

If blnChangingInCode Then
    Exit Sub ' or Exit Function
End if

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