Как создать электронное письмо из Excel, которое учитывает, сколько строк выбрано - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь сгенерировать электронное письмо от ввода данных до электронной таблицы, чтобы создать предложение работы.У нас есть список работ и назначаем его кому-то.

На данный момент, с моим кодом ниже, я могу отправить одно предложение по электронной почте, выбрав строку с работой и нажав кнопку команды.

Тем не менее, я мог бы предложить кому-то до 4 работ, и в идеале я хотел бы иметь возможность редактировать этот код, чтобы включить все выбранные строки.

У кого-нибудь есть какие-либо предложения?

Private Sub Generate_offer()

Dim strFile As String
Dim OutApp As Object
Dim objOutlookMsg As Object

  Set OutApp = CreateObject("Outlook.Application")
  Set objOutlookMsg = OutApp.CreateItem(0)

With objOutlookMsg
.SentOnBehalfOfName = ""
.to = ""
.Subject = ""
.HTMLBody = "<p style='font-family:arial;font-size:16'> Dear <br/><br/> 

[Body of email - CUT]

& "<p style='font-family:arial;font-size:14'><b>Offer</b>: " & Cells(ActiveCell.Row, "C").Value & "<br/>" _
& "<b>Dates</b>: " & Cells(ActiveCell.Row, "L").Value & " - " & Cells(ActiveCell.Row, "M").Value & "<br/>" _
& "<b>Approx. duration</b>: " & Cells(ActiveCell.Row, "P").Value & " weeks" & "<br/>" _
& "<b>Detils</b>: xxxxx - " & Cells(ActiveCell.Row, "F").Value & "; xxxxx - " & Cells(ActiveCell.Row, "G").Value & "; xxxxx - " & Cells(ActiveCell.Row, "H").Value & "<br/><br/>" & vbNewLine _

[Body of email - CUT]

.display
  End With

  'objOutlookMsg.Send
  Set OutApp = Nothing
End Sub

Любая помощь высоко ценится.

1 Ответ

1 голос
/ 16 апреля 2019

Обратите внимание на пару вещей в следующем примере ...

  1. (Почти) никогда не используйте Select.Ваш код является одним из случаев, когда вы требуете от пользователя выбрать набор предложений для запуска макроса.Selection отображается только в одной строке.В остальной части кода используется только установленная переменная диапазона offers.
  2. . Убедитесь, что ваши диапазоны всегда полностью квалифицированы .Для вас это означает не использование Cells само по себе, а настройку переменной диапазона (offers в моем примере), которая полностью квалифицирована, и использование ее в качестве основы для всех ваших ссылок Cells.

Это будет выглядеть примерно так:

Private Sub Generate_offer()
    Dim strFile As String
    Dim OutApp As Object
    Dim objOutlookMsg As Object

    Set OutApp = CreateObject("Outlook.Application")
    Set objOutlookMsg = OutApp.CreateItem(0)

    With objOutlookMsg
        .SentOnBehalfOfName = ""
        .To = ""
        .Subject = ""
        .HTMLbody = "<p style='font-family:arial;font-size:16'> Dear <br/><br/> "
        .HTMLbody = .HTMLbody & "[Body of email - CUT]"

        '--- assumes that the active selection is a set of rows,
        '    each row with unique offer details
        Dim offers As Range
        Set offers = ActiveSheet.Range.Selection
        Dim i As Long
        For i = 1 To offers.Rows.Count
            .HTMLbody = .HTMLbody & "<p style='font-family:arial;font-size:14'><b>Offer</b>: "
            .HTMLbody = .HTMLbody & offers.Cells(i, "C").Value & "<br/>"
            .HTMLbody = .HTMLbody & "<b>Dates</b>: " & offers.Cells(i, "L").Value
            .HTMLbody = .HTMLbody & " - " & offers.Cells(i, "M").Value & "<br/>"
            .HTMLbody = .HTMLbody & "<b>Approx. duration</b>: " & offers.Cells(i, "P").Value
            .HTMLbody = .HTMLbody & " weeks" & "<br/>"
            .HTMLbody = .HTMLbody & "<b>Details</b>: xxxxx - " & offers.Cells(i, "F").Value
            .HTMLbody = .HTMLbody & "; xxxxx - " & offers.Cells(i, "G").Value
            .HTMLbody = .HTMLbody & "; xxxxx - " & offers.Cells(i, "H").Value
            .HTMLbody = .HTMLbody & "<br/><br/>" & vbNewLine
        Next i
        .HTMLbody = .HTMLbody & [Body of email - CUT]
        .display
    End With

    'objOutlookMsg.Send
    Set OutApp = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...