Как отправить по электронной почте таблицу в vba, которая может содержать пропущенные ячейки / меняется, если ячейка пуста - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь выяснить, как пропустить пустые ячейки в таблице для отправки по электронной почте.Таблица составлена ​​по дням месяца и измеряет производительность наших сотрудников.Я хотел бы полностью опустить столбец, если в этой ячейке нет значения при отправке по электронной почте, чтобы таблица не имела длины 30 или 31 столбца.Например, сотрудник работает 14 дней в месяце, поэтому мне нужна таблица, которая показывает только эти 14 дней для отчета об эффективности.

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

У меня также есть вопрос о том, правильно ли отображаются таблицы, если электронная почта проверена на мобильном телефоне.,Таблица показывает, но у нее нет границ, как при проверке электронной почты в Outlook.Это не огромный приоритет, и, возможно, его следует задать в отдельном вопросе.

Вот как выглядит таблица, из которой я работаю: https://imgur.com/a/0z9lLRO

Sub SendEmail(what_address As String, subject_line As String, mail_body As String)

Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")

    Dim olMail As Outlook.MailItem
    Set olMail = olApp.CreateItem(olMailItem)

    olMail.To = what_address
    olMail.Subject = subject_line
    olMail.HTMLbody = mail_body
    olMail.Send

End Sub
Sub SendPerformance()

row_number = 3

Do
DoEvents
    row_number = row_number + 1
    Dim mail_body_message As String
    Dim full_name As String
    Dim replace_daily_average As String
    Dim replace_percentage As String
    Dim replace_comparison As String
    Dim StrBody As String

    full_name = ActiveSheet.Range("A" & row_number)
    percent_average = ActiveSheet.Range("AG" & row_number)
    comp_difference = ActiveSheet.Range("AH" & row_number)
    daily_average = ActiveSheet.Range("B" & row_number)

    mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
    mail_body_message = Replace(mail_body_message, "replace_daily_average", daily_average)
    mail_body_message = Replace(mail_body_message, "replace_percentage", percent_average)
    mail_body_message = Replace(mail_body_message, "replace_comparison", comp_difference)


    StrBody = "<html> <head> <style> br, table, table style {width: 300px;height: 315px;border: 1px solid black}, th {bpadding: 1px; border: 1px solid black;alignment: center}, td {bpadding: 3px; border: 1px solid black;alignment: center} </style> <head> <body> <table>"
    mail_body_message = "<span style=" & """" & "font-weight: bold;" & "color: #0000ff;" & """" & ActiveSheet.Range("AK4") & ">" & ActiveSheet.Range("AK4") & "<br/><br/>" & "<span style=" & """" & "font-weight: bold;" & "color: #ff0000;" & """" & ActiveSheet.Range("AK5") & ">" & ActiveSheet.Range("AK5") & "<br/><br/>" & "<span style=" & """" & "font-weight: bold;" & "color: #ff0000;" & """" & ActiveSheet.Range("AK6") & ">" & ActiveSheet.Range("AK6") & "<br/><br/>" & StrBody & vbNewLine & _
        "<tr>" & _
            "<th>" & ActiveSheet.Range("B2") & "</th>" & _
            "<th>" & ActiveSheet.Range("B3") & "</th>" & _
            "<td>" & daily_average & "</td></tr>" & _
            "</table>"

    mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
    mail_body_message = Replace(mail_body_message, "replace_daily_average", daily_average)
    mail_body_message = Replace(mail_body_message, "replace_percentage", percent_average)
    mail_body_message = Replace(mail_body_message, "replace_comparison", comp_difference)
    Call SendEmail(ActiveSheet.Range("AI" & row_number), ActiveSheet.Range("AK3"), mail_body_message)
Loop Until row_number = 50
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...