excel VBA从excel中replaceOutlook OFT文件中的文本

在Excel中,我有三列:

A: B: C: UserName UsermailAddress RecordToBeDeleted 

我在Excel中使用下面的代码从Outlook(使用OFT文件)发送和电子邮件到Excel电子表格的B列中的每个电子邮件地址。

只要发送到列B中的每个电子邮件地址,我所使用的代码就可以工作

RecordToBeDeleted的问题是,在电子邮件(OFT文件)中,我有两个关键字( UserNameRecordToBeDeleted ),我需要在与该邮件地址一起使用的每封电子邮件中进行replace。

代码findOFT文件中的两个关键字,但只删除它们或用空条目replace它们。

我做错了什么,以便我可以replaceOFT邮件中的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 

看来DoTest (和其他variables)中UserNameRecordToBeDeleted值是空的,因为你从主过程中调用sub,但是参数是通过ByRef或者通过引用传递的,这是默认的。 在你的情况下,这意味着你得到了你所拥有的 – 因为它们没有在RunEmails声明/分配, RunEmails ByRef值也是空的。 在你的情况下使用ByVal参数:

 Sub DoTest(ByVal EmailAddress As String, ByVal CCAddress As String, ByVal RecordToBeDeleted As String, ByVal UserName As String) 

阅读更多: 按值或引用传递参数 。

希望有帮助。