4

好的,我不确定这是否容易实现,但我会尝试。

如果单元格发生更改,我使用此子程序执行一些宏:

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引用了范围内的值)。这反过来导致我的“单元格更改”宏运行抛出错误。

有没有办法在我更新它引用的列表时阻止“单元格更改”宏运行?

希望这个问题有意义。

4

3 回答 3

10

Worksheet_Calculate您可以使用Application.EnableEvents如下方式禁用事件。请注意,这将禁用可能在两者之间发生的任何事件WorkSheet或事件WorkBookApplication.EnableEvents = FalseApplication.EnableEvents = True

因此,如果您的其他子程序像这样运行-该Worksheet_Calculate事件将不会触发

Sub Other_Sub()
Application.EnableEvents = False
[b4].Value = "10"
'other stuff
Application.EnableEvents = True
End Sub
于 2012-11-07T10:46:30.277 回答
1

Never mind, I have worked out a simple solution: Just put a conditional statement in saying to not execute "init" if B4 contains an error or is blank.

于 2012-11-07T10:48:51.430 回答
1

and be aware of (exit sub) or (exit function)... Don't forget to use Application.EnableEvents = True before (exit sub) or (exit function) commands (if exists)

于 2015-04-09T12:55:55.177 回答