首页 文章

EXCEL COMBOBOX - VBA - 在加载工作簿时执行

提问于
浏览
0

我在工作表页面上定义了一个嵌入式ActiveX组合框,这个ActiveX组合已关联一个列表,并在选择某个值时执行宏 .

此组合框选择来自位于同一工作表上的表 . 而Associated宏有这个“Private Sub ComboBox1_Change()”的定义 .

但每次加载工作表时,都会执行与COMBOBOX关联的宏代码 .

如何避免在启动时执行组合框代码?我试图在工作簿上禁用事件,但它不起作用 .

问候

3 回答

  • 2

    我明白你的意思 . 有时也会发生在我身上 . 这就是我在这种情况下所做的 . 使用这些代码

    In a module

    Public DoNotRun As Boolean
    

    In ThisWorkBook Code Area

    Private Sub Workbook_Open()
        DoNotRun = True
    
        '
        '~~> Rest of the code if any
        '
    End Sub
    

    In the ComboBox

    Private Sub ComboBox1_Change()
        If DoNotRun = True Then
            DoNotRun = False
            Exit Sub
        End If
    
        '
        '~~> Rest of the code
        '
    End Sub
    

    NOTE :记得在打开工作簿后在某处设置 DoNotRun = False . 否则,如果在打开工作簿后尝试立即更改ComboBox中的条目,则不会触发 _Change() 事件 .

    Alternative

    如果可以,请使用 ComboBox1_Click() 而不是 ComboBox1_Change() .

  • 0

    好的伎俩,谢谢 .

    但我试图设置它,但它没有按预期工作 . 为了跟踪发生的事情,我添加了一些消息弹出窗口以查看它是如何工作的,并且我已经意识到由于某种原因,这些代码以不同的顺序执行 . 我看到的是第一个执行的代码是ComboBox,然后是“ThisWorkbook”中的代码

    我按照你的解释设置了,在“Thisworkbook”代码和公共变量定义中添加了Workbook_open .

    我也在启动http://office.microsoft.com/en-us/excel-help/running-a-macro-when-excel-starts-HA001034628.aspx修改了这些宏指南,但....

  • 0

    至少我发现了这种奇怪行为的原因 .

    我已经在COMBOX设置属性上直接设置了fillrange属性,而不是使用VBA以编程方式设置

    当我删除此属性时,Workbook_load函数首先再次运行..并且ComboBox宏在任何其他之前未激活 .

    现在我将不得不找到另一种在ComboBox上加载数据的方法 .

    问候

相关问题