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

时间:2014-03-05 13:24:36

标签: excel vba excel-vba combobox

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

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

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

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

此致

3 个答案:

答案 0 :(得分:2)

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

在模块中

Public DoNotRun As Boolean

在本工作簿代码区

Private Sub Workbook_Open()
    DoNotRun = True

    '
    '~~> Rest of the code if any
    '
End Sub

在ComboBox中

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()

答案 1 :(得分:0)

好的伎俩,谢谢。

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

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

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

答案 2 :(得分:0)

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

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

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

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

此致