VBA для копирования и вставки Excel в powerpoint

#excel #vba

#excel #vba

Вопрос:

Благодаря BigBen — приведенный ниже код является исправленным примером, который показывает, как очистить слайды в существующем powerpoint, а затем скопировать и вставить диапазон из Excel в powerpoint в виде рисунка. Первоначальная ошибка заключалась в том, что ячейки не были определены, затем работа с линией для определения формы в powerpoint. Код должен работать.

 Option Explicit
    Sub ExportToPPT()

    Dim ppApp As PowerPoint.Application
    Set ppApp = New PowerPoint.Application

    Dim ppFileName As String
    ppFileName = "C:UsersDesktopFinancial Summary.pptx"

    Dim ppPres As PowerPoint.Presentation
    Set ppPres = ppApp.Presentations.Open(filename:=ppFileName)

    Dim ppSlide As PowerPoint.Slide

    Dim i As Integer
    For i = 2 To 9
        Set ppSlide = ppPres.Slides(i)

        Dim j As Integer
        For j = ppSlide.Shapes.Count To 1 Step -1
            If ppSlide.Shapes(j).Type = msoPicture Then
                ppSlide.Shapes(j).Delete
            End If
        Next j
    Next i

'preparation of the export

    Dim lastrow As Long
    Dim lRow As Long
    Dim lCol As Long

    Workbooks("A.xlsm").Activate
    Sheets("Graph Data").Select
    Range("E4").Value = "8"
    Application.Calculate

   `Set Sel = Selection
Set source = ActiveWorkbook.Sheets("waterfall").Range("B1")
ActiveWorkbook.Sheets("waterfall").Range("D1:AE40").Copy

Set ppSlide = ppPres.Slides(9)
ppSlide.Shapes.PasteSpecial ppPasteBitmap

   End Sub
  

Комментарии:

1. переменная «cell» является переменной диапазона, поэтому вы можете [Затемнить ячейку как диапазон] или [Затемнить ячейку как вариант]

2. Спасибо @KacireeSoftware — однако это привело к ошибке 1004, действие не будет работать с множественными выборками в следующей строке Union(Range("D1:AE" amp; lRow), Range(cells(1, cells.Column), cells(lRow, cells.Column))).CopyPicture

3. Позвольте мне подключить ваш код и запустить его на моем компьютере. Я вернусь

4. Похоже, что Range.CopyPicture не может использоваться с Union несколькими вариантами выбора — возможно, вам потребуется обходной путь.

5. Я понимаю вашу точку зрения — есть ли альтернатива в коде, которая могла бы напрямую выбирать диапазон из «D1: AE40» и избегать объединения?