Автор Тема: vba excel рассылки писем через outlook  (Прочитано 508 раз)

Оффлайн Посетитель 27.10.2022

  • Посетитель форума
  • Сообщений: 3
vba excel рассылки писем через outlook
« : 26 Октябрь 2022, 17:29 »
Добрый день! По коду формируется письмо с гиперссылкой, которая указана в определенной ячейке таблицы. В сформированном письме гиперссылка не срабатывает, хотя и опознается как гиперссылка (пишет нажмите, чтобы перейти по гиперссылке, но при нажатии ничего не происходит)

Код
Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String, CC As String
    Dim lr As Long, lLastR As Long
    Dim WB As Workbook
    Dim olItem As Object
 
  'Определяет последнюю заполненную строку по столбцу А
  Dim rF As Range
    Dim lLastRow As Long, lLastCol As Long
  Set rF = ActiveSheet.UsedRange.Find("*", , xlValues, xlWhole, , xlPrevious)
    If Not rF Is Nothing Then
        lLastRow = rF.Row
        End If
 
    'Application.ScreenUpdating = False
    'On Error Resume Next
    'пробуем подключиться к Outlook, если он уже открыт
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear 'Outlook закрыт, очищаем ошибку
    If objOutlookApp Is Nothing Then
        Set objOutlookApp = CreateObject("Outlook.Application")
    End If
    'произошла ошибка создания объекта - выход
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
    'objOutlookApp.Session.Logon "user","1234",False, True
   
    Set WB = ThisWorkbook
    lLastR = WB.Worksheets("рассылка").Cells(Rows.Count, 3).End(xlUp).Row
        Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
           'цикл от двух строки(начало данных с адресами) до последней ячейки таблицы
            For lr = 2 To lLastR
           sTo = sTo & "; " & WB.Worksheets("рассылка").Cells(lr, 13).Value 'адрес получателя
            Next lr
            For lr = 2 To lLastR
            CC = CC & "; " & WB.Worksheets("рассылка").Cells(lr, 14).Value
            Next lr
            sSubject = "КП по графику_" & WB.Worksheets("рассылка").Cells(2, 8).Value  'тема сообщения
        With objMail
            .To = sTo 'адрес получателя
            .CC = "email1@yandex.ru" & "; " & "email2@yandex.ru" & "; " & CC
            .Subject = sSubject 'тема сообщения
            .htmlbody = "<HTML><BODY> Добрый день! Напоминаю, что сегодня следующие КП за период: " & WB.Worksheets("рассылка").Cells(2, 12).Value
            .htmlbody = .htmlbody & ConvertRngToHTM(WB.Worksheets("рассылка").Range("A1:L" & lLastRow))
            .htmlbody = .htmlbody & "<HTML><BODY> <br> КП просьба сохранять в папку по пути: "
            .htmlbody = .htmlbody & "<a href=' '>" 'начало гиперссылки
            .htmlbody = .htmlbody & " " & WB.Worksheets("Списки").Range("E9").Value
            .htmlbody = .htmlbody & "</a>" 'конец гиперссылки
            .htmlbody = .htmlbody & "<HTML><BODY> <br> <span style=""color:#CC0000""><b>!Важно.</b></span style=""color:#CC0000""> <b>На постоянной основе:</b>"
            .htmlbody = .htmlbody & "<HTML><BODY> <br> После завершения выполнения контрольных процедур необходимо разместить файлы по пути:"
            .htmlbody = .htmlbody & "<a href=' '>" 'начало гиперссылки
            .htmlbody = .htmlbody & " " & WB.Worksheets("Списки").Range("E10").Value
            .htmlbody = .htmlbody & "</a>" 'конец гиперссылки
            .htmlbody = .htmlbody & "<HTML><BODY> <br><br><br><br><br> С наилучшими пожеланиями"
            .htmlbody = .htmlbody & "<HTML><BODY> Налоговая отчетность по НДС"
            .htmlbody = .htmlbody & "<HTML><BODY>  Налоговой службы ОЦО"
 
            '.Send ' если необходимо отправлять без просмотра
            .Display ' если необходимо просмотреть сообщение, а не отправлять без просмотра
           
        End With
   
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
   
     
 End Sub

Оффлайн Администратор

  • Administrator
  • Сообщений: 2162
Re: vba excel рассылки писем через outlook
« Ответ #1 : 26 Октябрь 2022, 17:39 »
Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Вы не указали гиперссылку, вы указали только поясняющий текст для пользователя.
Сама гиперссылка записывается сюда:
 .htmlbody = .htmlbody & "<a href=' '>" 'начало гиперссылки
а именно сюда: <a href=' '>
а именно между одинарных кавычек.

Т.е. должно быть так:
.htmlbody = .htmlbody & "<a href='" & WB.Worksheets("Списки").Range("E10").Value  &"'>" 'начало гиперссылки

А здесь у вас записывается поясняющий текст для пользователя, который он видит в письме (это синий текст):
 .htmlbody = .htmlbody & " " & WB.Worksheets("Списки").Range("E10").Value

Оффлайн Посетитель 27.10.2022

  • Посетитель форума
  • Сообщений: 3
Re: vba excel рассылки писем через outlook
« Ответ #2 : 26 Октябрь 2022, 17:47 »
Если вписываю как вы указываете, то гиперссылка не вставляется совсем, а весь текст, который должен быть после гиперссылки становится синим - как будто гиперссылка

Оффлайн Администратор

  • Administrator
  • Сообщений: 2162
Re: vba excel рассылки писем через outlook
« Ответ #3 : 26 Октябрь 2022, 17:53 »
Для теста попробуйте не подставлять URL из эксель-ячейки, а прямо в код напишите URL какой-нибудь страницы, например Яндекса. Посмотрите, стало нормально.

Т.е. три строки будут выглядеть так:
            .htmlbody = .htmlbody & "<a href='https://forumvba.ru'>" 'начало гиперссылки
            .htmlbody = .htmlbody & "https://forumvba.ru"
            .htmlbody = .htmlbody & "</a>" 'конец гиперссылки

Оффлайн Посетитель 27.10.2022

  • Посетитель форума
  • Сообщений: 3
Re: vba excel рассылки писем через outlook
« Ответ #4 : 26 Октябрь 2022, 17:58 »
Спасибо огромное! Когда увидела все три строки вместе, поняла, что не правильно вставляла в первый раз :-(