1

Excelには3つの列があります:

A:        B:               C:
UserName  UsermailAddress  RecordToBeDeleted

以下のコードを Excel で使用して、Outlook から (OFT ファイルを使用して) Excel スプレッドシートの列 B の各電子メール アドレスに送信および電子メールを送信しています。

私が持っているコードは、列Bの各メールアドレスに送信する限り機能します

私が抱えている問題は、電子メール メッセージ (OFT ファイル) に 2 つのキーワード (UserNameおよびRecordToBeDeleted) があり、そのメール アドレスに送信される各電子メールで置き換える必要があることです。

コードは OFT ファイルで 2 つのキーワードを検出しますが、それらを削除するか、null エントリに置き換えます。

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
4

1 に答える 1

0

メイン プロシージャから sub を呼び出すためUserName、およびRecordToBeDeletedin DoTest(およびその他の変数) の値は空のようですが、引数は渡されますByRef- または参照によって、これはデフォルトです。あなたの場合、それはあなたが持っているものを手に入れることを意味します-それらはで宣言/割り当てられていないためRunEmailsByRef値も空です。あなたの場合、ByVal引数を使用します:

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

詳細:値または参照による引数の受け渡し

お役に立てば幸いです。

于 2013-02-26T19:00:57.767 に答える