有没有更有效的方法可以根据频繁变化的单元格值向用户发送电子邮件提醒?这是我正在处理的代码,以便你们能够理解问题的背景。
'This is the main function
Sub notify()
Dim rng As Range
For Each rng In Range("F3:F14")
If (rng.Value = 1) Then
Call mymacro
End If
Next rng
End Sub
-----------------------------------------------------------------------
'This is the function that sends an email when called by the main function
Private Sub mymacro()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi there" & vbNewLine & vbNewLine & _
"This is line 1" & vbNewLine & _
"This is line 2"
On Error Resume Next
With xOutMail
.To = "email address"
.CC = ""
.BCC = ""
.Subject = "test succeeded"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
解释:
上述两个代码都位于我的工作表的同一模块中。该代码完全可以向用户发送电子邮件(通过 Outlook)。例如,如果 F3 和 F7 计算结果为真,则会向用户发送两封电子邮件。
现在,问题来了,我该如何编辑代码,以便如果发生相同情况(F3 和 F7 计算结果为真),发送给用户的两封电子邮件将指定哪个单元格计算结果为真。换句话说,发送的每封电子邮件在指出哪个特定单元格计算结果为真时都会有所不同。
此外,如果单元格(“F3:F14”)内的数据更新,代码是否能够重新运行?
我个人没有任何 VBA 背景,所以如果你们能用外行人能理解的术语解释一下就好了。谢谢!真的很感激!:)
答案1
考虑到这个问题是 2 年前提出的,我相信你要么已经解决了这个问题,要么已经放弃了。但这个问题排在了未回答列表的首位,所以……开始吧!
回答第一个问题,有没有更有效的方法?您分享的部分似乎是手动运行的,这意味着除非您执行操作,否则程序不会运行。我会尝试使用事件驱动的过程自动执行该任务。这可以通过多种不同的方式完成,我需要更多地了解您的工作流程才能获得显著的效率。
第二个问题是关于更改电子邮件。考虑到代码的当前状态,这是一个开放式问题。简短的解释是将单元格的值保存到一个或两个变量中,然后在电子邮件中使用该变量。
例如,如果您有一个名为 variableX 的变量,并且该变量的范围为 F3,那么您的电子邮件可以使用 variableX。
简单修改一下就可以添加信息了:
。Subject = "The cell at " & variableX.address & " is " & variableX. value & " test succeeded"