我正在使用带有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
答案 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
这可能并不优雅,但它可以正常工作,我不需要经常这样做。