Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 如何使用Excel和VBA将电子邮件正文中的特殊字符替换为每行中的值以发送给多个收件人_Email_Vba_Replace - Fatal编程技术网

Email 如何使用Excel和VBA将电子邮件正文中的特殊字符替换为每行中的值以发送给多个收件人

Email 如何使用Excel和VBA将电子邮件正文中的特殊字符替换为每行中的值以发送给多个收件人,email,vba,replace,Email,Vba,Replace,我正在创建一个Excel用户表单,它可以为多达500个收件人创建一封单独的电子邮件 工作表上有4列:姓名(A列)、电子邮件(B列)、值1(C列) 代码使用For和Next循环样式,其中r被声明为整数(r=2到500),并使用MailItem对象、.To=Cells(r,2) 我遇到的问题是试图合并一个范围(C列)中的值,该范围替换用于创建电子邮件正文的文本框中的特殊字符 因此,如果我键入,Hello,昨天有^&^个交易失败。并点击用于“发送”的命令按钮,它将向列B中列出的每个电子邮件地址发送一封

我正在创建一个Excel用户表单,它可以为多达500个收件人创建一封单独的电子邮件

工作表上有4列:姓名(A列)、电子邮件(B列)、值1(C列)

代码使用For和Next循环样式,其中r被声明为整数(r=2到500),并使用MailItem对象、.To=Cells(r,2)

我遇到的问题是试图合并一个范围(C列)中的值,该范围替换用于创建电子邮件正文的文本框中的特殊字符

因此,如果我键入,
Hello,昨天有^&^个交易失败。
并点击用于“发送”的命令按钮,它将向列B中列出的每个电子邮件地址发送一封电子邮件,并用列C中的值替换每个单独的电子邮件地址(每行)

下面以VBA代码为例。当然,为了使这个查询尽可能简短,我没有提到很多其他声明的变量

Dim Signature As String, EmailSensitivity As String, EmailImportance As String
Dim Greeting As String, Punctuation As String, Security As String

Sub SendButton1_Click()
If SubjectText = vbNullString Then
If EmailBody1 = vbNullString Then
    MsgBox "Form Incomplete:" & vbCrLf & vbCrLf & _
    "No Subject or Email Text.", vbOKOnly
    Exit Sub
End If
End If

If SubjectText = vbNullString Then
    MsgBox "Form Incomplete:" & vbCrLf & vbCrLf & _
    "Please enter Subject.", vbOKOnly
    Exit Sub
End If

If EmailBody1 = vbNullString Then
    MsgBox "Form Incomplete:" & vbCrLf & vbCrLf & _
    "Please enter Email Text."
    Exit Sub
End If

If SignatureText1 = vbNullString Then
    Continue = MsgBox("Your email contains no signature." & vbCrLf & vbCrLf & _
    "Are you sure you wish to proceed?", vbYesNo)
        If Continue = vbNo Then
            Exit Sub
        End If
End If



Dim OutApp As Object, OutMail As Object
Dim r As Integer

Application.ScreenUpdating = False

For r = 2 To 501

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(olMailItem)

On Error Resume Next
With OutMail
    .Subject = Security & SubjectText.Value
    .Body = EmailBody1.Value & vbCrLf & vbCrLf & _
     SignatureText1.Value
    .To = Cells(r, 2)
    .Attachements.Add AttachmentText1.Value
    .Importance = EmailImportance
    .Sensitivity = EmailSensitivity
    .Send
End With

Next r

Set OutApp = Nothing
Application.ScreenUpdating = True

Sheet1.Range("A2:B501").Clear

Continue = MsgBox("You have successfully generated a mass email!" & vbCrLf & vbCrLf & _
"Would you like to generate another email?", vbYesNo)
    If Continue = vbNo Then
        Application.Quit
    End If

End Sub
我还是一个业余爱好者,所以我正在清理大量不必要的代码,但是这个查询主要是用每行中列出的值替换特殊字符


这是我第一次在论坛上发布查询,如果我没有按照正确的程序进行操作,请告诉我。非常感谢您的帮助。

使用以下功能,可能就这么简单:

...
With OutMail
    .Subject = Security & SubjectText.Value
    .Body = Replace(EmailBody1.Value,"^&^",Cells(r, 3)) & _
            vbCrLf & vbCrLf & SignatureText1.Value
...
与此无关,但import:
On Error Resume Next
表示发送(以及此后的任何操作)将以静默方式失败。这将使未来的调试更加困难、令人沮丧和昂贵。您至少应该记录发生错误的相关详细信息,以及工作表中哪一行的详细信息。在程序可能意外失败的部分之后,请确保在错误转到0时使用
或类似工具重新启用错误检查