gpt4 book ai didi

vba - 如何防止在 VBA 中触发 ActiveX 事件?

转载 作者:行者123 更新时间:2023-12-02 10:00:49 25 4
gpt4 key购买 nike

我正在寻找一种更好的方法来禁用 ActiveX 事件在 Excel 工作簿中触发(尽管这适用于所有具有 ActiveX 对象的 Office 应用)。

希望类似于 Application.EnableEvents = false,尽管这不适用于 ActiveX。

在下面的示例中,使用全局 bool 值很简单,但我的 ActiveX 对象有很多事件处理程序,对于我可以普遍应用的暂时禁用 ActiveX 事件的东西来说,这将非常容易。我真的不想为这些方法中的每一个添加 if/exit 子语句。

为了演示此问题,请在工作表中创建一个 ActiveX 组合框并将以下内容添加到该工作表模块

Public initializingContent As Boolean 
Private Sub intializeAllActiveXContent()

'this doesn't apply to activeX events :'(
Application.EnableEvents = False

'this could work but is not really elegant
'change this to false to show my problem in
'the intermediate window (called not once but twice)
initializingContent = True

ComboBoxTest.Clear

ComboBoxTest.AddItem ("item1")
ComboBoxTest.AddItem ("item2")
ComboBoxTest.AddItem ("item3")

'select the top value in the box
ComboBoxTest.value = "item1"

initializingContent = False

Application.EnableEvents = True

End Sub

Private Sub ComboBoxTest_Change()
'I really don't want to have to wrap EVERY single ActiveX method
'with something like this for a whole variety of reasons...
If initializingContent Then Exit Sub

Debug.Print "do stuff I don't want to happen when intializeAllActiveXContent() runs " & _
"but I do when user changes box"
End Sub

最佳答案

我知道这真的很旧了。但任何查找此内容的人(第一次在谷歌上点击)可能想要一个简单的答案:

假设您有一个在 Application.EnableEvents = False 期间被调用的 Private Sub ActiveXControl_Change(),并且您希望它跳过此操作:

Private Sub ActiveXControl_Change()
If Application.EnableEvents = True Then
'enter you code here

End If
End Sub

关于vba - 如何防止在 VBA 中触发 ActiveX 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com