更改单元格时,VBA运行宏,但如果是宏,则运行宏

har*_*ryg 4 excel vba excel-vba

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

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

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
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我有点问题.

细胞B4,如在小区变更子引用的上方,具有由这是动态的,并包含在另一片的值的列表中的命名范围确定其值.我使用数据验证工具制作B4一个包含命名范围内容的下拉列表.

我有另一个宏,其目的是更新此列表.它的作用是清除当前列表,查询数据库并将一组值输出到该范围内.问题是,当运行此宏时,它会导致值B4更改(作为B4引用范围中的值).这反过来导致我的"单元格更改"宏运行抛出错误.

当我更新它引用的列表时,有没有办法防止"单元格更改"宏运行?

希望这个问题有道理.

bre*_*tdj 10

您可以Worksheet_Calculate使用Application.EnableEvents以下方法禁用事件.请注意,这将禁用介于和之间的任何WorkSheetWorkBook事件Application.EnableEvents = FalseApplication.EnableEvents = True

因此,如果您的其他子类运行如此 - Worksheet_Calculate事件将不会触发

Sub Other_Sub()
Application.EnableEvents = False
[b4].Value = "10"
'other stuff
Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这可能是一个比我自己更优雅和更强大的解决方案 - 它也使我的代码运行得更快! (3认同)