我在Excel的VBA中的用户表单中有两个多选列表框。
一个包含国家,另一个包含城市。
如果用户单击并选择/取消选择一个国家,我希望我的脚本自动选择/取消选择第二列表框中位于该国家/地区的所有城市。
同样,我希望如果用户单击并选择/取消选择一个城市,它会自动更新第一个列表框,以仅突出显示当前选择了所有相应城市的国家/地区。
我的问题是:
通过使用OnChange事件(OnClick不适用于多选列表框),每次更改任何一个列表框时,它都会更改另一个列表框。
在这种情况下,这意味着任何时候更改一个国家,它都会更改第二个列表框中的所有相应城市-对于每个国家,用户实际上被限制为选择所有城市或不选择任何城市。
是否可以判断列表框是由用户更改的还是由脚本更改的?如果没有,有没有其他方法可以满足我的目标?
感谢您的阅读。
发布于 2016-07-22 03:09:28
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 Subhttps://stackoverflow.com/questions/38512290
复制相似问题