Excel 可以在电子邮件正文字符串中使用列中的值(例如名称)吗?

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

我的目标:一个带有VBA代码的Excel电子表格,其中 -A列中的用户ID用于发送地址。 -B列中的用户名用于电子邮件正文的问候语

我拥有:我创建了多封电子邮件,其中A列中的每个用户ID都有一个电子邮件正文

我不明白的是:如何使用电子邮件正文中B列的名称

对于每封电子邮件:

这是迄今为止的代码,星号已经被用来代替电子邮件文本

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活动进行分组,以避免交换焦点。感谢您的建议,我将尝试使用它来了解我的想法。