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

时间:2012-11-07 10:33:09

标签: excel excel-vba 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

这很好但我有点问题。

在上面的单元格更改子中引用的单元格B4的值由命名范围确定,该范围是动态的并且包含另一个工作表上的值列表。我使用数据验证工具使B4成为包含指定范围内容的下拉列表。

我有另一个宏的目的是更新此列表。它的作用是清除当前列表,查询数据库并将一组值输出到该范围内。麻烦的是,当运行此宏时,它会导致B4的值发生变化(因为B4引用该范围内的值)。这反过来导致我的“单元格更改”宏运行错误。

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

希望这个问题有道理。

3 个答案:

答案 0 :(得分:9)

您可以使用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

答案 1 :(得分:1)

没关系,我已经找到了一个简单的解决方案: 如果B4包含错误或为空白,只需将条件语句置于不执行“init”。

答案 2 :(得分:0)

并注意(退出子)或(退出功能)...... 不要忘记在(退出子)或(退出函数)命令(如果存在)之前使用Application.EnableEvents = True