Worksheet_Change 中的 If 语句不适用于 On Error Resume Next

问题描述 投票:0回答:1

我使用 Power Query 从国家气象局提取河流水位数据。

我想使用VBA在河流水位超过一定水平时自动向我发送电子邮件。

Dim xRg As Range

Private Sub Worksheet_Change(ByVal Target As Range)
   On Error Resume Next
   Set xRg = Intersect(Range("B2"), Target)
   If xRg Is Nothing Then Exit Sub
   If IsNumeric(Target.Value) And Target.Value > 15 Then
      Call Mail_small_Text_Outlook
   End If
End Sub

当Power Query刷新时,会触发Worksheet_Change事件。无论单元格 B2 的值如何,都会发送电子邮件。我希望它仅在值超过 15 时才发送电子邮件。

我尝试添加以下代码来解决该问题。

If IsNumeric(Target.Value) And Target.Value <= 15 Then Exit Sub

上面的代码确实在值不超过 15 时阻止了事件发送电子邮件,但也阻止了刷新 Power Query 时触发事件。
我需要在 Power Query 刷新时触发 Worksheet_Change 事件。

如果我解决了这个问题,我希望添加一些东西来关闭 Worksheet_Change 事件,以阻止它多次发送电子邮件。

excel vba powerquery worksheet-function
1个回答
1
投票
  • 避免使用“出现错误时继续下一步”,除非您确定有意忽略特定错误。
  • 如果没有其他过程(子/函数)访问变量
    xRg
    ,请考虑将 Dim 语句移至
    Worksheet_Change
    事件中。
  • 如果
    Target
    是多单元
    Range
    ,则
    Target.Value
    相当于
    Target.Cells(1).Value
    。例如,如果 PQ 更新
    A2:K5
    ,则
    Target.Value
    是单元格
    A2
    的内容,而不是
    B2
Private Sub Worksheet_Change(ByVal Target As Range)
   If Me.Range("B4") <> "Yes" Then Exit Sub ' switch of mailing
   Dim xRg As Range
   Set xRg = Intersect(Me.Range("B2"), Target)
   If xRg Is Nothing Then Exit Sub
   If IsNumeric(Me.Range("B2").Value) And Me.Range("B2").Value > 15 Then
      Call Mail_small_Text_Outlook
   End If
End Sub

问题:添加一个按钮或类似的东西来关闭 Worksheet_Change 事件并阻止它多次发送电子邮件

  • 在工作表(Sheet1)上添加 ActiveX 命令按钮

  • ThisWorkbook
    模块中添加事件代码。

Private Sub Workbook_Open()
    Sheets("Sheet1").CommandButton1.Caption = "Click to DisableEvents"
End Sub
  • Sheet1
    模块中添加事件代码
Private Sub CommandButton1_Click()
    With Application
        ' Update CommandButton1 caption
        Sheets("Sheet1").CommandButton1.Caption = "Click to " & IIf(.EnableEvents, "EnableEvents", "DisableEvents")
        ' Switch setting
        .EnableEvents = Not .EnableEvents
        Me.Range("E1").Value = .EnableEvents  ' for demo
    End With
End Sub
' Demo event code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox "You select cell " & Target.Address
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.