好吧我不确定这是否容易实现,但我会尝试 .
如果单元格被更改,我使用此子程序执行一些宏:
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
引用了该范围内的值) . 这反过来导致我的"cell change"宏运行抛出错误 .
当我更新它引用的列表时,有没有办法防止“单元格更改”宏运行?
希望这个问题有道理 .
3 回答
您可以使用
Application.EnableEvents
禁用Worksheet_Calculate
事件,如下所示 . 请注意,这将禁用Application.EnableEvents = False
和Application.EnableEvents = True
之间可能发生的任何WorkSheet
或WorkBook
事件因此,如果您的其他子类运行如此 -
Worksheet_Calculate
事件将不会触发没关系,我已经找到了一个简单的解决方案:如果B4包含错误或者是空白,只需在条件语句中说不执行“init” .
并注意(退出子)或(退出函数)...不要忘记在(退出子)或(退出函数)命令之前使用Application.EnableEvents = True(如果存在)