0

レポートのメール送信の自動化として使用する Excel シートがあります。現在、Excelワークブックの実際のコピーを電子メールに添付して送信しています。メーラーには数人の異なる人が含まれており、毎日異なるレポートを受け取ります。一部のファイルのサイズが原因で、サイズが大きすぎて電子メールを送信できないという問題が発生し始めているため、代わりにファイルへのリンクを送信するように切り替えたいと考えています。壁。

Lotus Notes 8.5 を使用しています。VBA は範囲を循環し、各セルには「,」で区切られたレポートのリストがあります。リストを受け取り、文字列としてメーラーに渡します。メーラーは文字列を受け取り、それを配列に変換して分割し、レポートが最新のものであることを確認します。1 つの電子メールに、最大 10 個の異なるレポートを含めることができます。リンクを含める HTML MIME メールを作成してみました。ここに私が現在持っているコードがあります:

Sub Send_HTML_Email(ByRef Name As String, ByRef Address As String, ByRef Reports As String)

    Const ENC_IDENTITY_8BIT = 1729

     'Send Lotus Notes email containing links to files on local computer

    Dim NSession As Object 'NotesSession
    Dim NDatabase As Object 'NotesDatabase
    Dim NStream As Object 'NotesStream
    Dim NDoc As Object 'NotesDocument
    Dim NMIMEBody As Object 'NotesMIMEEntity
    Dim SendTo As String
    Dim subject As String
    Dim HTML As String, HTMLbody As String
    Dim Array1() As String
    Dim Links As String
    Dim gRange As Variant
    Dim i As Integer

    SendTo = "myEmail@address.com"
    subject = "My Subject " & Name & "."
    Debug.Print subject

    Set NSession = CreateObject("Notes.NotesSession") 'using Lotus Notes Automation Classes (OLE)
    Set NDatabase = NSession.GetDatabase("", "")

    If Not NDatabase.IsOpen Then NDatabase.OPENMAIL

    Set NStream = NSession.CreateStream

     Array1 = Split(Reports, ",")

    i = 1

        HTML = "<html>" & vbLf & _
        "<head>" & vbLf & _
        "<meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />" & vbLf & _
        "</head>" & vbLf & _
        "<body>" & vbLf & _
        "<p>" & gRange.Value & "</p>"

    For Each gRange In Array1

    Select Case gRange

        Case "Report name 1"
        Reports = "G:\file Location\Report Name 1.xlsx"
        Case "Report name 2"
        Reports = "G:\file Location\Report Name 2.xlsx"
        Case "Report name 3"
        Reports = "G:\file Location\Report Name 3.xlsx"
        Case "Report name 4"
        Reports = "G:\file Location\Report Name 4.xlsx"
        Case "Report name 5"
        Reports = "G:\file Location\Report Name 5.xlsx"
        Case "Report name 6"
        Reports = "G:\file Location\Report Name 6.xlsx"
    End Select

        If Reports <> "" And Format(FileDateTime(Reports), "mm/dd/yyyy") = Format(Now, "mm/dd/yyyy") Then

        Select Case gRange

            Case "Report name 1"
            Links = "G:\file%20Location\Report%20Name%201.xlsx"
            Case "Report name 2"
            Links = "G:\file%20Location\Report%20Name%202.xlsx"
            Case "Report name 3"
            Links = "G:\file%20Location\Report%20Name%203.xlsx"
            Case "Report name 4"
            Links = "G:\file%20Location\Report%20Name%204.xlsx"
            Case "Report name 5"
            Links = "G:\file%20Location\Report%20Name%205.xlsx"

        End Select

            If Links <> "" Then
            HTMLbodyi = ""<a href='file://" & Links & "'>" & gRange & "</a><br>""
            End If

        "</body>" & vbLf & _
        "</html>"

        i = i + 1

        End If

    Next gRange


    NSession.ConvertMime = False 'Don't convert MIME to rich text

    Set NDoc = NDatabase.CreateDocument()

    With NDoc
        .Form = "Memo"
        .subject = subject
        .SendTo = Split(SendTo, ",")

        Set NMIMEBody = .CreateMIMEEntity
        NStream.WriteText HTML
        NMIMEBody.SetContentFromText NStream, "text/html; charset=UTF-8", ENC_IDENTITY_8BIT

        .Send False
        .Save True, False, False
    End With

    NSession.ConvertMime = True 'Restore conversion

    Set NDoc = Nothing
    Set NSession = Nothing

End Sub

Case ステートメントを使用して、異なるレポート名を持つセルの配列に基づいて、レポートとリンクのセットを切り替えています。ある人物のセルは と のみを持ちReport name 1Report name 3次の人物はそれらすべてを持っている可能性があります。

私が得ることができるどんな助けにも本当に感謝しています!

メールは送信されますが、空白であるか、最初のメールに到達してリンク先HTMLbodyiの最初の部分のみが含まれ<a、残りは空白です。

4

1 に答える 1

3

次の行に問題があります。

HTMLbodyi = "<a href='file://" & Links & "></><br>"

HTML の形式が正しくありません。これを次のように変更する必要があります。

HTMLbodyi = "<a href='file://" & Links & "'>" & gRange & "</a><br>"

もう 1 つの問題は、ループの反復ごとに HTML 行を設定していることですが、本当にやりたいことは、ループ内にリンクを追加することだけです。このコードを分割する必要があります。

HTML = "<html>" & vbLf & _
    "<head>" & vbLf & _
    "<meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />" & vbLf & _
    "</head>" & vbLf & _
    "<body>" & vbLf & _
    "<p>" & gRange.Value & "</p>" & _
    HTMLbodyi & _
    "</body>" & vbLf & _
    "</html>"

ループののタグまでの部分に HTML 文字列を設定します。次に、ループでリンクを追加します。最後に、ループの後に</body></html>HTML 文字列に を追加します。

編集: これが更新されたコードです。HTML 変数をたどって、主な変更点を確認してください。

Sub Send_HTML_Email (文字列としての ByRef 名、文字列としての ByRef アドレス、文字列としての ByRef レポート)

Const ENC_IDENTITY_8BIT = 1729

 'Send Lotus Notes email containing links to files on local computer

Dim NSession As Object 'NotesSession
Dim NDatabase As Object 'NotesDatabase
Dim NStream As Object 'NotesStream
Dim NDoc As Object 'NotesDocument
Dim NMIMEBody As Object 'NotesMIMEEntity
Dim SendTo As String
Dim subject As String
Dim HTML As String, HTMLbody As String
Dim Array1() As String
Dim Links As String
Dim gRange As Variant
Dim i As Integer

SendTo = "myEmail@address.com"
subject = "My Subject " & Name & "."
Debug.Print subject

Set NSession = CreateObject("Notes.NotesSession") 'using Lotus Notes Automation Classes (OLE)
Set NDatabase = NSession.GetDatabase("", "")

If Not NDatabase.IsOpen Then NDatabase.OPENMAIL

Set NStream = NSession.CreateStream

 Array1 = Split(Reports, ",")

i = 1

HTML = "<html>" & vbLf & _
    "<head>" & vbLf & _
    "<meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />" & vbLf & _
    "</head>" & vbLf & _
    "<body>" & vbLf


For Each gRange In Array1

Select Case gRange

    Case "Report name 1"
    Reports = "G:\file Location\Report Name 1.xlsx"
    Case "Report name 2"
    Reports = "G:\file Location\Report Name 2.xlsx"
    Case "Report name 3"
    Reports = "G:\file Location\Report Name 3.xlsx"
    Case "Report name 4"
    Reports = "G:\file Location\Report Name 4.xlsx"
    Case "Report name 5"
    Reports = "G:\file Location\Report Name 5.xlsx"
    Case "Report name 6"
    Reports = "G:\file Location\Report Name 6.xlsx"
End Select

    If Reports <> "" And Format(FileDateTime(Reports), "mm/dd/yyyy") = Format(Now, "mm/dd/yyyy") Then

    Select Case gRange

        Case "Report name 1"
        Links = "G:\file%20Location\Report%20Name%201.xlsx"
        Case "Report name 2"
        Links = "G:\file%20Location\Report%20Name%202.xlsx"
        Case "Report name 3"
        Links = "G:\file%20Location\Report%20Name%203.xlsx"
        Case "Report name 4"
        Links = "G:\file%20Location\Report%20Name%204.xlsx"
        Case "Report name 5"
        Links = "G:\file%20Location\Report%20Name%205.xlsx"

    End Select

        If Links <> "" Then
        HTML = HTML & ""<p><a href='file://" & Links & "'>" & gRange & "</a></p>""
        End If

    i = i + 1

    End If

Next gRange

HTML = HTML & "</body>" & vbLf & "</html>"

NSession.ConvertMime = False 'Don't convert MIME to rich text

Set NDoc = NDatabase.CreateDocument()

With NDoc
    .Form = "Memo"
    .subject = subject
    .SendTo = Split(SendTo, ",")

    Set NMIMEBody = .CreateMIMEEntity
    NStream.WriteText HTML
    NMIMEBody.SetContentFromText NStream, "text/html; charset=UTF-8", ENC_IDENTITY_8BIT

    .Send False
    .Save True, False, False
End With

NSession.ConvertMime = True 'Restore conversion

Set NDoc = Nothing
Set NSession = Nothing

サブ終了

于 2013-10-29T18:15:33.837 に答える