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
这可能不太优雅,但它确实有效,而且我不需要经常这样做。
我正在使用 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
这可能不太优雅,但它确实有效,而且我不需要经常这样做。