我使用 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 事件,以阻止它多次发送电子邮件。
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