我在Excel中的VBA中的用户窗体中有两个多选列表框。
一个包含国家/地区,另一个包含城市。
如果用户点击并选择/取消选择某个国家/地区,我希望我的脚本能够在第二个列表框中自动选择/取消选择该国家/地区中的所有城市。
同样,我希望如果用户点击并选择/取消选择某个城市,它会自动更新第一个列表框,以仅突出显示当前所有相应城市都已选中的国家/地区。
我的问题是:
通过使用OnChange事件(OnClick不适用于多选列表框),每次更改列表框时,它都会更改另一个。
在这种情况下,这意味着每当国家/地区发生变化时,它都会更改第二个列表框中的所有相应城市 - 对于每个国家/地区,用户实际上仅限于选择所有城市或没有城市。
是否要告知用户或脚本是否更改了列表框?如果没有,是否存在可以满足我目标的替代方法?
感谢您的阅读。
答案 0 :(得分:0)
Application.EnableEvents对UserForm对象没有影响。
您需要的是表单范围变量(最好的方法是添加自定义属性)来存储和操作表单的事件状态。
请参阅此示例并沿此重新编写代码,此示例适用于CheckBox,但相同的逻辑适用于ListBox,ComboBox等...
'/ UserForm with 2 CheckBoxes : CheckBox1 and CheckBox2
Private m_bEvents As Boolean
Public Property Let EnableFormEvents(bVal As Boolean)
m_bEvents = bVal
End Property
Public Property Get EnableFormEvents() As Boolean
EnableFormEvents = m_bEvents
End Property
Private Sub CheckBox1_Click()
'/ Custom Event Status
Me.EnableFormEvents = False
Me.CheckBox2 = Me.CheckBox1
Me.EnableFormEvents = True
End Sub
Private Sub CheckBox2_Click()
If Me.EnableFormEvents Then
MsgBox "Check box clicked by user."
Else
MsgBox "Check box clicked by code."
End If
End Sub