#excel #vba
Вопрос:
Я хочу скопировать диапазон ячеек и вставить его в электронное письмо в виде изображения, я наткнулся на код, который это делает (он создает диаграмму, и изображение вставляется туда, а затем сохраняется в виде изображения), когда я запускаю его с разрывами, он работает нормально, но без них он сохраняет изображение с черным пробелом внизу. Вот код
Sub SaveImage() Dim tmp As Variant, str As String, h As Double, w As Double Dim P3 As Worksheet Dim Logo As Object Dim OA, OM As Object Set OA = CreateObject("Outlook.Application") Set OM = OA.CREATEITEM(0) Set P3 = Worksheets("Draft") Set Logo = ThisWorkbook.ActiveSheet.Pictures("Picture 1") Const dw As Double = 1186.56 Const dh As Double = 755.28 Logo.Copy Dim sImgName As String Application.PrintCommunication = False Application.EnableEvents = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = False w = Logo.Width h = Logo.Height str = "C:Usersfn031094DesktopScreenshot.png" Application.DisplayAlerts = False Set tmp = Charts.Add On Error Resume Next With tmp .PageSetup.PaperSize = xlPaperExecutive .Width = w .Height = h .PageSetup.TopMargin = IIf(w gt; dw, dh - dw * h / w, dh - h) 28 .PageSetup.BottomMargin = 0 .PageSetup.RightMargin = IIf(h gt; dh, dw - dh * w / h, dw - w) 36 .PageSetup.LeftMargin = 0 .PageSetup.HeaderMargin = 0 .PageSetup.FooterMargin = 0 .SeriesCollection(1).Delete DoEvents .Paste DoEvents .Export Filename:=str, Filtername:="png" .Delete End With just running the macro i get this
Когда я перехожу через настроенную страницу, я получаю изображение, как мне хочется, но
Я не хочу, чтобы это пустое место внизу Могло кто-нибудь помочь мне исправить это или дать другой способ отправить изображение? Спасибо
Комментарии:
1. Итак, если вам не нужно пустое место, что вам там нужно?
2. Мне просто нужно изображение, я не хочу, чтобы вокруг него было пустое пространство
Ответ №1:
Я думаю, твоя проблема в том, что линия
Set Logo = ThisWorkbook.ActiveSheet.Pictures("Picture 1")
Эта рабочая книга-это рабочая книга, содержащая макрос, а не активный.
Пожалуйста, избегайте ссылок на активную таблицу или рабочую книгу в макросах, имеющих дело с несколькими листами или книгами.
Определите в начале переменные и назначьте им активный элемент. Затем обратитесь только к вашей переменной.
Напр.:
Dim CurSheet as worksheet … Set CurSheet=ActiveSheet … Set Logo=CurSheet.Pictures("Picture 1")