excel VBA从excel替换Outlook OFT文件中的文本

excel VBA从excel替换Outlook OFT文件中的文本,excel,vba,outlook,outlook-2010,Excel,Vba,Outlook,Outlook 2010,在excel中,我有三列: A: B: C: UserName UsermailAddress RecordToBeDeleted 我正在使用下面excel中的代码从Outlook(使用OFT文件)向excel电子表格B列中的每个电子邮件地址发送电子邮件 我的代码可以发送到B列中的每个电子邮件地址 我的问题是,在电子邮件(OFT文件)中,我有两个关键字(UserName和RecordToBeDeleted),我需要在每个与该邮件地址相关的电子邮件中

在excel中,我有三列:

A:        B:               C:
UserName  UsermailAddress  RecordToBeDeleted
我正在使用下面excel中的代码从Outlook(使用OFT文件)向excel电子表格B列中的每个电子邮件地址发送电子邮件

我的代码可以发送到B列中的每个电子邮件地址

我的问题是,在电子邮件(OFT文件)中,我有两个关键字(
UserName
RecordToBeDeleted
),我需要在每个与该邮件地址相关的电子邮件中替换它们

代码在OFT文件中查找这两个关键字,但只是删除它们或用空条目替换它们

我做错了什么,这样我就可以替换OFT邮件消息中excel文件中的单词了

excel工作表中的VBA是:

Sub RunEmails()
    Dim i As Integer
    Dim rngCell As Range

    For Each rngCell In Range("A2", "A" & CStr(Cells(Rows.Count, "A").End(xlUp).Row))
        Call DoTest(rngCell.Offset(0, 1).Value, "JDoe@abc.com", rngCell.Offset(0, 2).Value, rngCell.Value)
    Next rngCell

End Sub

Sub DoTest(EmailAddress As String, CCAddress As String, RecordToBeDeleted As String, UserName As String)
    Dim oApp As New Outlook.Application

    Dim olNewMail As Outlook.MailItem
    Const Template As String = "D:\Documents\list\list-mail.oft"

    Set olNewMail = oApp.CreateItemFromTemplate(Template)

    olNewMail.Recipients.Add EmailAddress
    olNewMail.HTMLBody = Replace(olNewMail.HTMLBody, ">UserName<", UserName)
    olNewMail.HTMLBody = Replace(olNewMail.HTMLBody, ">RecordToBeDeleted<", RecordToBeDeleted)
    olNewMail.VotingOptions = "Can distribution list be Deleted YES;Can distribution list be Deleted NO"

    olNewMail.Send
End Sub
Sub-RunEmails()
作为整数的Dim i
Dim rngCell As范围
对于范围(“A2”、“A”和CStr(单元格(Rows.Count,“A”)。结束(xlUp.Row))中的每个rngCell
调用DoTest(rngCell.Offset(0,1).Value,“JDoe@abc.com,rngCell.Offset(0,2).Value,rngCell.Value)
下一个rngCell
端接头
子点测试(EmailAddress为字符串,CCAddress为字符串,RecordToBeDeleted为字符串,UserName为字符串)
Dim oApp作为新的Outlook.Application
将NewMail设置为Outlook.MailItem
常量模板为String=“D:\Documents\list\list mail.oft”
设置olNewMail=oApp.CreateItemFromTemplate(模板)
olNewMail.Recipients.Add电子邮件地址

olNewMail.HTMLBody=Replace(olNewMail.HTMLBody,“>usernamecordtobedeleted似乎
UserName
RecordToBeDeleted
的值在
DoTest
中(和其他变量)是空的,因为您从主过程调用sub,但是参数通过引用传递
ByRef
-或,这是默认情况。在您的情况下,这意味着您得到了您所拥有的-因为它们没有在
RunEmails
中声明/分配,
ByRef
值也是空的。在您的情况下,请使用
ByVale> 论据:

Sub DoTest(ByVal EmailAddress As String, ByVal CCAddress As String, ByVal RecordToBeDeleted As String, ByVal UserName As String)
阅读更多:


希望这是有帮助的。

谢谢你提供的信息,我替换了那一行,但仍然得到了相同的结果,只是空的替换。我正在尝试阅读,但对VBA了解不多,这是我尝试创建的第一个,所以现在只是尝试获取要替换的值。在这种情况下,很高兴看到你的Excel文件-我不是当然,它可以正确地从中读取值。感谢您提供的信息,我替换了那一行,但仍然得到相同的结果,只有空的替换。我正在尝试了解这一点,但对VBA了解不多,这是我尝试创建的第一个,所以现在仅尝试获取要替换的值我使用了以下方法-成功了!