Размещение ссылок на документы Excel в Lotus Notes

0

У меня есть лист Excel, который я использую в качестве автоматизатора рассылки для отчетов. Поскольку в настоящее время он прикрепляет фактическую копию книги excel к электронной почте и отправляет ее. В почтовой программе есть несколько разных людей, и каждый день они получают разные отчеты. Из-за размера некоторых файлов я начинаю сталкиваться с проблемой, когда я больше не могу отправлять электронные письма, потому что они слишком большие, поэтому я хочу переключиться на отправку ссылок на файлы вместо этого, и я ударил стены.

Я использую Lotus Notes 8.5. VBA будет циклически проходить через диапазон, и каждая ячейка имеет список отчетов, разделенных символом ",". Он берет список и передает его почтовой программе в виде строки. Почтовая программа берет строку, превращает ее в массив и разбивает ее, а затем проверяет, чтобы отчеты были текущими. Одно электронное письмо может содержать до 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 = "[email protected]"
    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 1 и Report name 3, а у следующего - все.

Я очень ценю любую помощь, которую я могу получить!

Письма будут отправляться, но они либо HTMLbodyi, либо они попадают в первый HTMLbodyi и включают только начальный <a где должна идти ссылка, а затем остальная часть пуста.

Теги:
excel
lotus-notes
lotusscript

1 ответ

3
Лучший ответ

Я вижу проблему с этой строкой:

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

HTML неверен. Его нужно изменить следующим образом:

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

Другая проблема заключается в том, что вы устанавливаете строку 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 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 = "[email protected]"
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

End Sub

  • 0
    Я понимаю неправильно сформированный HTML, я упустил из виду ', но когда вы говорите, чтобы разделить HTML, чтобы добавить HTMLbodyi , у меня возникают трудности с правильным форматированием. Будет ли это выглядеть примерно так: я отредактировал код в первоначальном вопросе с изменениями.
  • 0
    Я обновил свой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню