Макрос работает по — другому, когда проходит через

#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")