excel - 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
解决方案
我不使用 ActiveCell,而是将“Target”作为参数添加到Mail_small_Text_Outlook
. 这样你就可以确定你引用的单元格是同一个单元格。
如果您需要使用 ActiveCell(出于某种原因)并且您没有得到正确的结果,您可以使用类似的方法:
MsgBox ActiveCell.Address
仔细检查您使用的单元格是否是您期望的单元格。
我还建议将Mail_small_Text_Outlook
andMail_small_Text_Outlook2
合并到一个 sub 中并添加一个参数来指定您要使用的电子邮件正文。这样,打开 Outlook 和创建实际电子邮件的代码只在一个地方,因此如果您需要更改/调试它,您只需执行一次。
最后的 sub 可能看起来像这样
Mail_small_Text_Outlook(Target As Range, EmailBody As Integer)
:
推荐阅读
- node.js - 每 24 小时删除一次用户数据,node.js postgres
- flutter - 有没有办法按字符串中的数字对字符串列表进行排序?
- ios - 如何在 iOS Swift 中为 CMSampleBufferGetFormatDescription 创建 anAudioSampleBuffer
- r - R:如何判断单词中重复字母出现的位置以添加到数据框中
- c# - MVC 消除了在视图中的模型绑定中预先修复项目名称的需要
- macos - macOS 上使用 mach_absolute_time 的 NASM x64 - 无法获得纳秒(工作代码审查)
- reactjs - 将位置道具传递给未路由的组件
- python - Pytest 测试类值
- php - 我可以选择一个虚拟表,它的数据并将其用于 php 的其他内容吗?
- python - 使用 sklearn 时出现错误:ValueError:无法将字符串转换为浮点数: