Excel 可以在电子邮件正文字符串中使用列中的值(例如名称)吗?
我的目标:一个带有VBA代码的Excel电子表格,其中 -A列中的用户ID用于发送地址。 -B列中的用户名用于电子邮件正文的问候语 我拥有:我创建了多封电子邮件,其中A列中的每个用户ID都有一个电子邮件正文 我不明白的是:如何使用电子邮件正文中B列的名称 对于每封电子邮件:Excel 可以在电子邮件正文字符串中使用列中的值(例如名称)吗?,excel,vba,Excel,Vba,我的目标:一个带有VBA代码的Excel电子表格,其中 -A列中的用户ID用于发送地址。 -B列中的用户名用于电子邮件正文的问候语 我拥有:我创建了多封电子邮件,其中A列中的每个用户ID都有一个电子邮件正文 我不明白的是:如何使用电子邮件正文中B列的名称 对于每封电子邮件: 这是迄今为止的代码,星号已经被用来代替电子邮件文本 Sub SendEmail() Dim i As Integer, Mail_Object, Email_Subject, o As Variant, lr As
这是迄今为止的代码,星号已经被用来代替电子邮件文本
Sub SendEmail()
Dim i As Integer, Mail_Object, Email_Subject, o As Variant, lr As Long
Dim strbody As String
lr = Cells(Rows.Count, "A").End(xlUp).Row
Set Mail_Object = CreateObject("Outlook.Application")
strbody = "Hello " & vbNewLine & _
"***********************" & vbNewLine & vbNewLine & _
"***********************" & vbNewLine & _
"***********************" & vbNewLine & vbNewLine & _
"***********************" & vbNewLine & _
"***********************" & vbNewLine
For i = 2 To lr
With Mail_Object.CreateItem(o)
.Subject = Range("C2").Value
.To = Range("A" & i).Value
.Body = strbody
.SentOnBehalfOfName = "*****"
'.Send
.display 'disable display and enable send to send automatically
End With
Next i
'MsgBox "E-mail successfully sent", 64
'Application.DisplayAlerts = False
Set Mail_Object = Nothing
End Sub
只需将单元格(2,i)中的值添加到循环中的.body中,如下所示
`Sub SendEmail()
Dim i As Integer, Mail_Object, Email_Subject, o As Variant, lr As Long
Dim strbody As String, Strbody1 as String
lr = Cells(Rows.Count, "A").End(xlUp).Row
Set Mail_Object = CreateObject("Outlook.Application")
strbody = "Hello "
strbody1 = vbNewLine & _
"***********************" & vbNewLine & vbNewLine & _
"***********************" & vbNewLine & _
"***********************" & vbNewLine & vbNewLine & _
"***********************" & vbNewLine & _
"***********************" & vbNewLine
For i = 2 To lr
With Mail_Object.CreateItem(o)
.Subject = Range("C2").Value
.To = Range("A" & i).Value
.Body = strbody & Range("B" & i).Value & strbody2
.SentOnBehalfOfName = "*****"
'.Send
.display 'disable display and enable send to send automatically
End With
Next i
'MsgBox "E-mail successfully sent", 64
'Application.DisplayAlerts = False
Set Mail_Object = Nothing
End Sub`
我将给出我的评论作为回答: 首先,立即执行Excel活动,将所需内容存储在变量中,这样您就不会将焦点切换回Excel/Outlook:
Public toString as String
Private Sub excelActivities()
with thisworkbook.sheets("NAME")
dim lr as long
lr = .Cells(.Rows.Count, "A").End(xlUp).Row
dim i as long
for i = 2 to lr
toString = toString & ";" & .Cells(i,1).Value
next i
end with
End Sub
然后,您可以在执行Outlook活动时使用存储为变量的Excel值。。。可以是两个串联调用的独立子例程:
Sub generateEmail()
excelActivities
outlookActivities
End Sub
您的
outlookActivities
将包括创建电子邮件、添加.To=toString
等。将strobody
的创建移动到循环内,并将(&
)从B列(范围(“B”)和()值连接到用户名中。好的,我已经尝试了(范围(“B”)和(i).Value,但决不能在循环内使用strbody。您还可以在循环外创建strbody
,使用类似“[用户名]”
的占位符,然后只需将循环内的占位符替换为范围(“B”&i).Value
。哇,非常感谢。我真的很感激这正是我所需要的。两件事……首先:确定您的范围。Range().Value
与workbook().sheets().Range()的比较.value
可能会有问题,具体取决于活动的内容。第二:将Excel内容与Outlook内容分开,以避免某些性能问题。创建一个字符串并存储为变量,然后将所述变量附加到电子邮件.Postscript;您还可以使用函数或单个子例程中的某个内容来生成字符串,例如有公共变量无效,但仍将在outlook活动之前对excel活动进行分组,以避免交换焦点。感谢您的建议,我将尝试使用它来了解我的想法。