【问题标题】:How to keep formats when I copy a range from Excel to outlook将范围从 Excel 复制到 Outlook 时如何保留格式
【发布时间】:2020-03-18 21:25:27
【问题描述】:

您好,我有一个 Excel 表格,其中有一些格式 10(Red) -> 15(Green),但最后我丢失了我的所有格式擅长。我使用下一个代码从范围发送电子邮件到 Outlook

Sub email()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim Fname As String
    Dim hoja As String
    Dim rng As Range
    Dim celdas As String

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

    Set rng = Range("C3:Q22")
    On Error Resume Next
    With OutMail

        .To = "juan"
        .CC = "Maria"
        .BCC = ""
        .Subject = "XXXX"
        .HTMLBody = "Hey" & RangetoHTML(rng)

        .Display   'or use .Display
    End With
    On Error GoTo 0

    'Kill Fname
    Set OutMail = Nothing
    Set OutApp = Nothing

End Sub

还有下一个函数,我从下一个链接How to send mails from excel复制过来的

Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2010
    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

【问题讨论】:

    标签: excel vba format


    【解决方案1】:

    虽然 OP 接受的答案可能对他有用,但我不认为这是正确的答案。

    如果您想保留源中的格式,您需要使用 xlPasteAllUsingSourceTheme

    代码:

    With TempWB.Sheets(1)
            .Cells(1).PasteSpecial Paste:=8
            '.Cells(1).PasteSpecial xlPasteValues, , False, False
            '.Cells(1).PasteSpecial xlPasteFormats, , False, False
            .Cells(1).PasteSpecial xlPasteAllUsingSourceTheme, , False, False
            .Cells(1).Select
            Application.CutCopyMode = False
            On Error Resume Next
            .DrawingObjects.Visible = True
            .DrawingObjects.Delete
            On Error GoTo 0
    End With
    

    【讨论】:

      【解决方案2】:

      好的,我在 rangetoHtml() 中找到了制作方法,何时粘贴我更改代码的值:

          With TempWB.Sheets(1)
              '.Cells(1).PasteSpecial Paste:=8
              .Cells(1).PasteSpecial
              '.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
      

      因为如果我只是复制和粘贴,我不会丢失任何格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        • 2023-03-25
        • 2015-12-31
        • 2018-12-17
        • 2022-01-27
        • 2021-03-13
        相关资源
        最近更新 更多