我在工作表页面上定义了一个嵌入式ActiveX组合框,这个ActiveX组合已关联一个列表,并在选择某个值时执行宏 .
此组合框选择来自位于同一工作表上的表 . 而Associated宏有这个“Private Sub ComboBox1_Change()”的定义 .
但每次加载工作表时,都会执行与COMBOBOX关联的宏代码 .
如何避免在启动时执行组合框代码?我试图在工作簿上禁用事件,但它不起作用 .
问候
我明白你的意思 . 有时也会发生在我身上 . 这就是我在这种情况下所做的 . 使用这些代码
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() 事件 .
DoNotRun = False
_Change()
Alternative
如果可以,请使用 ComboBox1_Click() 而不是 ComboBox1_Change() .
ComboBox1_Click()
ComboBox1_Change()
好的伎俩,谢谢 .
但我试图设置它,但它没有按预期工作 . 为了跟踪发生的事情,我添加了一些消息弹出窗口以查看它是如何工作的,并且我已经意识到由于某种原因,这些代码以不同的顺序执行 . 我看到的是第一个执行的代码是ComboBox,然后是“ThisWorkbook”中的代码
我按照你的解释设置了,在“Thisworkbook”代码和公共变量定义中添加了Workbook_open .
我也在启动http://office.microsoft.com/en-us/excel-help/running-a-macro-when-excel-starts-HA001034628.aspx修改了这些宏指南,但....
至少我发现了这种奇怪行为的原因 .
我已经在COMBOX设置属性上直接设置了fillrange属性,而不是使用VBA以编程方式设置
当我删除此属性时,Workbook_load函数首先再次运行..并且ComboBox宏在任何其他之前未激活 .
现在我将不得不找到另一种在ComboBox上加载数据的方法 .
3 回答
我明白你的意思 . 有时也会发生在我身上 . 这就是我在这种情况下所做的 . 使用这些代码
In a module
In ThisWorkBook Code Area
In the ComboBox
NOTE :记得在打开工作簿后在某处设置
DoNotRun = False
. 否则,如果在打开工作簿后尝试立即更改ComboBox中的条目,则不会触发_Change()
事件 .Alternative
如果可以,请使用
ComboBox1_Click()
而不是ComboBox1_Change()
.好的伎俩,谢谢 .
但我试图设置它,但它没有按预期工作 . 为了跟踪发生的事情,我添加了一些消息弹出窗口以查看它是如何工作的,并且我已经意识到由于某种原因,这些代码以不同的顺序执行 . 我看到的是第一个执行的代码是ComboBox,然后是“ThisWorkbook”中的代码
我按照你的解释设置了,在“Thisworkbook”代码和公共变量定义中添加了Workbook_open .
我也在启动http://office.microsoft.com/en-us/excel-help/running-a-macro-when-excel-starts-HA001034628.aspx修改了这些宏指南,但....
至少我发现了这种奇怪行为的原因 .
我已经在COMBOX设置属性上直接设置了fillrange属性,而不是使用VBA以编程方式设置
当我删除此属性时,Workbook_load函数首先再次运行..并且ComboBox宏在任何其他之前未激活 .
现在我将不得不找到另一种在ComboBox上加载数据的方法 .
问候