#excel #vba #outlook
#excel #vba #outlook
Вопрос:
Я пытаюсь встроить несколько диапазонов из листа в виде изображений .emf в текст письма Outlook. Я попытался настроить приведенный ниже код Рона де Брюина, который показан для вставки диапазонов в формате .jpg, но это выдает ошибку «Изображение в данный момент не может быть отображено».
Любая помощь здесь будет оценена. Пожалуйста, ознакомьтесь с кодом Рона де Брюина ниже, как показано на его веб-сайте:
Sub Mail_small_Text_And_JPG_Range_Outlook()
'Ron de Bruin, 25-10-2019
'This macro use the function named : CopyRangeToJPG
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim MakeJPG As String
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "Dear Customer" amp; "<br><br>" amp; _
"Below you find a picture of your data." amp; "<br>" amp; _
"If you need more information let me know." amp; "<br><br>" amp; _
"Regards Ron<br>"
'Create JPG file of the range
'Only enter the Sheet name and the range address
MakeJPG = CopyRangeToJPG("Sheet1", "A1:H50")
If MakeJPG = "" Then
MsgBox "Something go wrong, we can't create the mail"
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Exit Sub
End If
On Error Resume Next
With OutMail
.To = "ron@debruin.nl"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Attachments.Add MakeJPG, 1, 0
'Note: Change the width and height as needed
.HTMLBody = "<html><p>" amp; strbody amp; "</p><img src=""cid:NamePicture.jpg"" width=750 height=700></html>"
.Display 'or use .Send
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Function CopyRangeToJPG(NameWorksheet As String, RangeAddress As String) As String
'Ron de Bruin, 25-10-2019
Dim PictureRange As Range
With ActiveWorkbook
On Error Resume Next
.Worksheets(NameWorksheet).Activate
Set PictureRange = .Worksheets(NameWorksheet).Range(RangeAddress)
If PictureRange Is Nothing Then
MsgBox "Sorry this is not a correct range"
On Error GoTo 0
Exit Function
End If
PictureRange.CopyPicture
With .Worksheets(NameWorksheet).ChartObjects.Add(PictureRange.Left, PictureRange.Top, PictureRange.Width, PictureRange.Height)
.Activate
.Chart.Paste
.Chart.Export Environ$("temp") amp; Application.PathSeparator amp; "NamePicture.jpg", "JPG"
End With
.Worksheets(NameWorksheet).ChartObjects(.Worksheets(NameWorksheet).ChartObjects.Count).Delete
End With
CopyRangeToJPG = Environ$("temp") amp; Application.PathSeparator amp; "NamePicture.jpg"
Set PictureRange = Nothing
End Function
Комментарии:
1. Почему бы вам не начать с изображений в формате .jpg, пока вы не заработаете код и не отправите эти изображения в формате .jpg. Затем настройте код для обработки изображений .emf.
2. Привет, мне удалось заставить код работать с изображениями .jpg, но он больше не работает, когда я корректирую код, изменяя all .jpg на .emf. Может быть, я чего-то не хватает при настройке кода?