【问题标题】:EXCEL COMBOBOX - VBA - executed when workbook is loadedEXCEL COMBOBOX - VBA - 加载工作簿时执行
【发布时间】:2014-03-05 13:24:35
【问题描述】:

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

此组合框选择来自位于同一工作表上的表。并且关联的宏有这个“Private Sub ComboBox1_Change()”的定义。

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

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

问候

【问题讨论】:

    标签: vba excel combobox


    【解决方案1】:

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

    在一个模块中

    Public DoNotRun As Boolean
    

    在 ThisWorkBook 代码区

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

    在组合框中

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

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

    替代方案

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

    【讨论】:

      【解决方案2】:

      不错的技巧,谢谢。

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

      我已经按照您的解释进行了设置,在“Thisworkbook”代码和公共变量定义中添加了 Workbook_open。

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

      【讨论】:

        【解决方案3】:

        至少我找到了这种奇怪行为的原因。

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

        当我删除此属性时,Workbook_load 函数首先再次运行.. 并且 ComboBox 宏未先激活。

        现在我必须找到另一种在 ComboBox 上加载数据的方法..

        问候

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-24
          • 1970-01-01
          • 1970-01-01
          • 2018-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多