【问题标题】:Run Excel VBA automatically whenever a cell value is changed (via calculation)每当更改单元格值时自动运行 Excel VBA(通过计算)
【发布时间】:2015-05-26 21:19:42
【问题描述】:

如果特定单元格大于 -0.03,我有一个现有的宏执行 Excel 工作表的屏幕截图。目前,此单元格是基于来自外部源的实时数据的公式。我可以手动运行此宏,但我希望它连续运行,即每次该单元格大于 -0.03 时自动截取工作表的屏幕截图。

到目前为止,这是我的代码;

Private Sub Worksheet_Calculate()

If range("d81")>-0.03 Then
    Application.EnableEvents = False
    Call ScreenCapture
    Application.EnableEvents = True
End If

Application.ScreenUpdating = False
Application.DisplayAlerts = False

End Sub

有人可以帮忙吗?

【问题讨论】:

  • 考虑使用 Calculate() 事件
  • This 有帮助吗?

标签: vba excel


【解决方案1】:

尝试在工作表中使用它

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If range("d81")>-0.03 Then
        With Application
            .EnableEvents = False
            Call ScreenCapture
            .EnableEvents = True
           .ScreenUpdating = False
           .DisplayAlerts=True
        End With
    End If

End Sub

这将在每次工作表发生更改时运行宏。

但是 -0.03 单元格是如何生成的。如果是用户输入,则单元格被停用(点击退出、移开等)

如果您希望在通过用户输入或 vba 更改值时使用 Worksheet_Change 事件(将上面的 Worksheet_SelectionChange 替换为该事件)

然后,如果它是计算单元格,则使用 Worksheet_Calculate() 事件(替换 Worksheet_SelectionChange(ByVal Target As Range))在通过计算更改值时运行宏。

【讨论】:

  • This will run the macro every time there is a change on the worksheet. 不,那不是真的。
  • 感谢您的回复。请注意,它是一个计算单元格。我使用了 Worksheet_Calculate() 事件和您上面的代码,但是我收到了错误消息“End if without block if”。
  • @AG6:请参阅我在您的答案下方发布的链接。
  • @SiddharthRout 抱歉,我更新了代码而不是文本 - 你是正确的
  • @AG6 这是在哪一行写的?
【解决方案2】:

您可以通过在包含您要引用的单元格的工作表上使用Worksheet_Change(ByVal Target As Range) 来执行此操作。

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 2015-10-23
    • 2018-09-05
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多