首页 文章

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

提问于
浏览
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 引用了该范围内的值) . 这反过来导致我的"cell change"宏运行抛出错误 .

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

希望这个问题有道理 .

3 回答

  • 1

    您可以使用 Application.EnableEvents 禁用 Worksheet_Calculate 事件,如下所示 . 请注意,这将禁用 Application.EnableEvents = FalseApplication.EnableEvents = True 之间可能发生的任何 WorkSheetWorkBook 事件

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

    Sub Other_Sub()
    Application.EnableEvents = False
    [b4].Value = "10"
    'other stuff
    Application.EnableEvents = True
    End Sub
    
  • 0

    没关系,我已经找到了一个简单的解决方案:如果B4包含错误或者是空白,只需在条件语句中说不执行“init” .

  • 9

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

相关问题