簡體   English   中英

VBA Excel 到 Outlook 字體格式

[英]VBA Excel to Outlook font formatting

我目前正在為我的工作進行流程自動化。 基本上,宏分析數據並創建帶有結果的電子郵件。

一切都很好,除了我完全不知道如何在 Outlook 的電子郵件正文中實現我的字體格式。 我無法將字體格式設置為常量值,因為每行的格式各不相同,並且取決於我的工作表中的 excel 公式和條件格式。

創建 HTML 正文的函數如下所示:

            Private Function BodyBuilder(wsA As Worksheet) As String
            Dim html As String
            Dim sTTo As String
            Dim rngSN As Range
            Dim cl As Range
            Dim sName As String


            Set OutSh = ThisWorkbook.Sheets("Output")

               sTTo = Comm.Cells(5, 4)

               sName = OutSh.Cells(3, 2)

               html = "Dear " & sTTo & ","

            Set rngSN = OutSh.Range("a4:a11")

            html = html & "<br><br><table><tr><td><strong>" & "Detailed risk report for selected company - " & sName & "</strong></td></tr>"

            **For Each cl In rngSN
               html = html & "<tr><td>" & Format(cl.Value, cl.NumberFormat) & "</td><td>" & cl.Offset(, 1).Value & "</td></tr>"
            Next cl**


            html = html & "</table>" & "<br>" & "Kind regards"

            BodyBuilder = html
            End Function

基本上,除了我想用它的字體格式(如果需要和顏色加粗)查看我的值之外,電子郵件看起來非常好。

有人可以幫忙嗎?

謝謝

如果您的目標是在功能上能夠將 Excel 中的一些數據“復制粘貼”到 Outlook 電子郵件中,同時保留所有格式,那么使用 Ron de Bruin 的函數將 Excel 范圍轉換為 HTML 可能是最簡單的。 我檢查了一下,這似乎甚至保留了條件格式的格式。

源網站。

然后你可以把你的數據轉換成 HTML 放入 body 標簽中

html = html & RangeToHTML(OutSh.Range("a4:a11"))

(重新發布有問題的功能)

Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2016
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook

    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    'Copy the range and create a new workbook to past the data in
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With

    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With

    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.readall
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")

    'Close TempWB
    TempWB.Close savechanges:=False

    'Delete the htm file we used in this function
    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function

Wedge 是正確的,Ron de Bruin 的 RangeToHtml 是您的首選。 但是,此例程使用 Excel 發布對象,這些對象會生成質量較差的 CCS,列寬以像素為單位設置。 至少有些智能手機根本無法處理此 CSS,而其他智能手機會產生難以閱讀的顯示。 如果您的收件人都不會使用智能手機打開您的電子郵件,那么 Wedge 的解決方案將足以滿足您的需求。

第二種解決方案是我用 VBA 編寫的 RangeToHtml 例程。 以下摘錄自其介紹列出了其對格式的處理:

  ' The table below lists the formats handled at cell and or in-cell level.
  '   CELL-LEVEL            IN-CELL           DEFAULT VALUE
  '   bold                  bold              false
  '   italic                italic            false
  '   strikethrough         strikethrough     false
  '   underline single      underline single  no underline
  '   underline double      underline double  no underline
  '   underline accounting                    no underline
  '   font colour           font colour       black
  '   background colour                       white
  '   horizontal alignment                    left for string; right for numbers and dates
  '   font size             font size         11 or as set at the Excel application level
  '   font name             font name         Calibri or as set at the Excel application level
  '   vertical alignment                      bottom

我的例程的問題是(1)它不是特別快,(2)它的總大小遠遠超過堆棧溢出每個答案 30,000 個字符的限制。 如果您需要類似這種級別的功能,請給我發電子郵件,我會將我的開發工作簿發送給您。

如果您只需要粗體和幾種顏色,則可以使用我的方法編寫自己的例程。

我的 html head 元素是這樣的:

  <head>
    <meta http-equiv="Content-Type"content="text/html; charset=utf-8"/>
    <style>
      table {border-collapse:collapse;}
      td {border-style:solid; border-width:1px; border-color:#BFBFBF;}
      td.backclr-0000FF {background-color:#0000FF;}
      td.backclr-D7EAF4 {background-color:#D7EAF4;}
      td.backclr-F3F5DB {background-color:#F3F5DB;}
      td.bold {font-weight:bold;}
      td.fontclr-0000FF {color:#0000FF;}
      td.fontclr-0070C0 {color:#0070C0;}
      td.fontclr-00FF00 {color:#00FF00;}
      td.hAlign-right {text-align:right;}
        </style>
  <head>

我的例程只生成處理它在 Excel 范圍內找到的格式所需的樣式。 如果你只需要粗體和幾種顏色,你可以用比我需要的更短的類名硬編碼你自己的樣式元素。

一行的輸出是這樣的:

  <tr>
    <td class="td.backclr-0000FF ">Column1</td>
    <td class="hAlign-right td.fontclr-0000FF ">100,000</td>
    <td class="hAlign-right td.bold ">200,000</td>
  </tr>

如果第二種和第三種方法中的任何一種看起來有趣但不清楚,請發表評論,我將擴展我的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM