首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VBA ( Excel)中,区分以编程方式更改的列表框和单击时更改的列表框

在VBA ( Excel)中,区分以编程方式更改的列表框和单击时更改的列表框
EN

Stack Overflow用户
提问于 2016-07-22 02:56:12
回答 1查看 740关注 0票数 0

我在Excel的VBA中的用户表单中有两个多选列表框。

一个包含国家,另一个包含城市。

如果用户单击并选择/取消选择一个国家,我希望我的脚本自动选择/取消选择第二列表框中位于该国家/地区的所有城市。

同样,我希望如果用户单击并选择/取消选择一个城市,它会自动更新第一个列表框,以仅突出显示当前选择了所有相应城市的国家/地区。

我的问题是:

通过使用OnChange事件(OnClick不适用于多选列表框),每次更改任何一个列表框时,它都会更改另一个列表框。

在这种情况下,这意味着任何时候更改一个国家,它都会更改第二个列表框中的所有相应城市-对于每个国家,用户实际上被限制为选择所有城市或不选择任何城市。

是否可以判断列表框是由用户更改的还是由脚本更改的?如果没有,有没有其他方法可以满足我的目标?

感谢您的阅读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-22 03:09:28

Application.EnableEvents对UserForm对象没有影响。

您需要的是一个窗体范围的变量(最好的方法是添加一个自定义属性)来存储和操作窗体的事件状态。

看看这个例子,然后重新编写你的代码,这个例子是针对CheckBox的,但同样的逻辑也适用于ListBox,ComboBox等……

代码语言:javascript
复制
'/ 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38512290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档