Excel VBA - 电子邮件主题行以包含偏移单元格的值



我是VB的新手,希望得到任何帮助。提前谢谢你。

我正在尝试在特定单元格具有特定值时发送电子邮件。例如,当单元格 E3 的值为 1 时,我想发送电子邮件 1,当它的值为 2 时,我想发送电子邮件 2。这部分正在工作。我还希望主题行是左侧单元格 3 位的内容,即当触发单元格 E3 发送电子邮件时,我希望主题行是 B3 的内容,当 E4 被触发时,我希望主题是 B4 的内容。这就是我滑倒的地方,我已经尝试了各种偏移和范围选项,但我只是在电子邮件中得到一个空白的主题行。这是我所拥有的:

Dim xRg As Range
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("E3:E5"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value = 1 Then
Call Mail_small_Text_Outlook
ElseIf IsNumeric(Target.Value) And Target.Value = 2 Then
Call Mail_small_Text_Outlook2
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Good Day" & vbNewLine & _
"Content Mail 1"
On Error Resume Next
With xOutMail
.To = "xxx@mci.co.za"
.CC = ""
.BCC = ""
.Subject = ActiveCell.Offset(0, -3).Value
.Body = xMailBody
.Display   'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
Sub Mail_small_Text_Outlook2()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Good Day" & vbNewLine & _
"Content Mail 2"
On Error Resume Next
With xOutMail
.To = "xxx@mci.co.za"
.CC = ""
.BCC = ""
.Subject = ActiveCell.Offset(0, -3).Value
.Body = xMailBody
.Display   'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub

我会将"Target"作为参数添加到Mail_small_Text_Outlook,而不是使用 ActiveCell。这样,您可以确定所引用的单元格是相同的。

如果您需要使用ActiveCell(出于某种原因(并且没有得到正确的结果,则可以使用以下内容:
MsgBox ActiveCell.Address
只是为了仔细检查您使用的单元格是否是您期望的单元格。

我还建议将Mail_small_Text_OutlookMail_small_Text_Outlook2合并为一个子,并添加一个参数来指定要使用的电子邮件正文。这样,用于打开Outlook和创建实际电子邮件的代码仅在一个位置,因此如果您需要更改/调试它,则只需执行一次。

最后一个子可能看起来像这样:Mail_small_Text_Outlook(Target As Range, EmailBody As Integer).

最新更新