我在工作表页面上定义了一个嵌入式ActiveX组合框,这个ActiveX组合已关联一个列表,并在选择某个值时执行宏。
此组合框选择来自位于同一工作表上的表。 Associated宏有这个“Private Sub ComboBox1_Change()”定义。
但每次加载工作表时,都会执行与COMBOBOX关联的宏代码。
如何避免在启动时执行组合框代码?我试图在工作簿上禁用事件,但它不起作用。
此致
答案 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上加载数据的方法..
此致