好的我不确定这是否容易实现,但我会尝试。
如果更改单元格,我使用此子程序执行某些宏:
Private Sub Worksheet_Calculate()
Dim target As Range
Set target = Range("b4")
If Not Intersect(target, Range("b4")) Is Nothing Then
Call init
End If
End Sub
这很好但我有点问题。
在上面的单元格更改子中引用的单元格B4
的值由命名范围确定,该范围是动态的并且包含另一个工作表上的值列表。我使用数据验证工具使B4
成为包含指定范围内容的下拉列表。
我有另一个宏的目的是更新此列表。它的作用是清除当前列表,查询数据库并将一组值输出到该范围内。麻烦的是,当运行此宏时,它会导致B4
的值发生变化(因为B4
引用该范围内的值)。这反过来导致我的“单元格更改”宏运行错误。
当我更新它引用的列表时,有没有办法防止“单元格更改”宏运行?
希望这个问题有道理。
答案 0 :(得分:9)
您可以使用Worksheet_Calculate
禁用Application.EnableEvents
事件,如下所示。请注意,这会停用WorkSheet
和WorkBook
之间可能发生的任何Application.EnableEvents = False
或Application.EnableEvents = True
事件
因此,如果您的其他子项运行如此 - Worksheet_Calculate
事件将不会触发
Sub Other_Sub()
Application.EnableEvents = False
[b4].Value = "10"
'other stuff
Application.EnableEvents = True
End Sub
答案 1 :(得分:1)
没关系,我已经找到了一个简单的解决方案: 如果B4包含错误或为空白,只需将条件语句置于不执行“init”。
答案 2 :(得分:0)
并注意(退出子)或(退出功能)...... 不要忘记在(退出子)或(退出函数)命令(如果存在)之前使用Application.EnableEvents = True