Я копирую содержимое Excel из Excel в тело электронной почты Outlook, и, в отличие от многих других пользователей, моя проблема не в том, что форматирование ячеек нарушено, а в том, что при копировании любого изображения из Excel они вставляются в Outlook с белой ячейкой за верхним левым углом изображения.

Прикрепил образец изображения с тем, как он выглядит в Excel, а затем в Outlook.

Я потратил часы, пытаясь решить эту проблему, включая:

  • изменить формат изображения (PNG/JPG/BMP)
  • поиграйтесь с разрешением, сжатием изображения, опцией перемещения и размера с ячейками и т. д.
  • попытался вручную скопировать диапазон в тело электронной почты Outlook, скопировав его с помощью макроса, который преобразует диапазон листа в строку html и генерирует письмо непосредственно из Excel.

Последний вариант, в котором я использовал VBA для генерации электронной почты непосредственно из Excel, представляет определенную проблему, как ручное копирование и вставка из Excel. Проблема возникает только вокруг области изображений и ячеек, которые касаются верхнего угла изображения, независимо от того, являются ли эти ячейки обычными ячейками или объединены.

Это наводит меня на мысль, что это либо проблема с моими изображениями / объектом (я заменил все изображения фигурами и у меня была та же проблема, либо ошибка в MS Office, когда дело доходит до обработки процесса копирования и вставки содержимого с объектами ,

Хотелось бы услышать некоторые мнения о вас, ребята, я в конце своего ума.

Спасибо!

Также вот функция, которую я использую для копирования диапазона в outlook.

Excel VBA

Option Explicit

Private Function RngToEmail(rng As Range, eTo As String, eSubject As String)
    Dim wbThis As Workbook, wbNew As Workbook
    Dim tempFileName As String, imgName As String, newPath As String

    '~~> Do not change "Myimg". This will be used to
    '~~> identify the images
    Dim imgPrefix As String: imgPrefix = "Myimg"

    '~~> This is the temp html file name.
    '~~> Do not change this as when you publish the
    '~~> html file, it will create a folder Temp_files
    '~~> to store the images
    Dim tmpFile As String: tmpFile = "Temp.Htm"

    Set wbThis = Workbooks(rng.Parent.Parent.Name)
    Set wbNew = Workbooks.Add

    '~~> Copy the relevant range to new workbook
    rng.Copy wbNew.Worksheets("Sheet1").Range("A:A")

    newPath = wbThis.Path & "\"
    tempFileName = newPath & tmpFile

    '~~> Publish the image
    With wbNew.PublishObjects.Add(xlSourceRange, _
        tempFileName, "Sheet1", rng.Address, xlHtmlStatic, _
        imgPrefix, "")
        .Publish (True)
        .AutoRepublish = True
    End With

    '~~> Close the new file without saving
    wbNew.Close (False)

    '~~> Read the html file in a string in one go
    Dim MyData As String, strData() As String
    Dim i As Long
    Open tempFileName For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)

    '~~> Loop through the file
    For i = LBound(strData) To UBound(strData)
        '~~> Here we will first get the image names
        If InStr(1, strData(i), "Myimg_", vbTextCompare) And InStr(1, strData(i), ".Png", vbTextCompare) Then
            '~~> Insert actual path to the images
            strData(i) = Replace(strData(i), "Temp_files/", newPath & "Temp_files\")
        End If
    Next i

    '~~> Rejoin to get the new html string
    MyData = Join(strData, vbCrLf)

    '~~> Create the Email
    Dim OutApp As Object, OutMail As Object
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .to = eTo
        .Subject = eSubject

        '~~> Set the body
        .HTMLBody = MyData

        '~~> Show the email. Change it to `.Send` to send it
        .Display
    End With

    '~~> Delete the temp file name
    Kill tempFileName
End Function

Sub Sample()
    RngToEmail ThisWorkbook.Sheets("FINAL").Range("A:F"), "someemail@someserver.com", "Some Subject"
End Sub

1 ответ1

0

Вы вставляете картинку в эту ячейку? При тестировании на моем Outlook 2016 версии 1812 я также обнаружил проблему. Ячейка за рисунком будет выглядеть пустой или проводной при вставке в тело письма. Я не нашел соответствующих официальных статей, и я не знаком с кодом VBA.

Тем не менее, мы можем выбрать вставку в качестве изображения в Параметры вставки, чтобы избежать этого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .