将Excel工作表粘贴到PowerPoint演示文稿中

时间:2017-08-20 14:54:58

标签: excel vba excel-vba powerpoint

我尝试从Excel粘贴到完成的PowerPoint演示文稿。我从Peltier Tech和Spreadsheet Guru那里获取了一些代码。该宏旨在在Excel模板中工作,该模板生成另一个Excel工作表,然后将其粘贴到PowerPoint中。

我已经在输出工作表中测试了代码并且它可以正常工作。

Output when Macro works

但是,当在Excel模板中执行宏时,它会失败。

Output when Macro fails

我是否需要将输出工作表定义为对象变量?如何在Excel to Powerpoint粘贴循环和MyRangeArray部分中引用该变量?

请注意,objPPT是在grandFinale()上游的宏中定义的。

Sub grandFinale()

Dim PPPres As PowerPoint.Presentation 
Dim PPSlide As PowerPoint.Slide
Dim shp As Object
Dim MySlideArray As Variant
Dim MyRangeArray As Variant
Dim x As Long

Set objPPT = GetObject(, "Powerpoint.Application")
Set PPPres = objPPT.ActivePresentation
Set PPSlide = PPPres.Slides(objPPT.ActiveWindow.Selection.SlideRange.SlideIndex)

'declare pp slides
MySlideArray = Array(13, 14, 15, 16, 17, 18, 19, 20, 21, 22)

'declare excel ranges
MyRangeArray = Array(Sheet2.Range("A6:C18"), Sheet2.Range("A21:C33"), _
    Sheet2.Range("A36:C48"), Sheet2.Range("A51:C63"), Sheet2.Range("A66:C78"), _
   Sheet2.Range("A81:C93"), Sheet2.Range("A96:C108"), Sheet2.Range("A111:C123"), Sheet2.Range("A126:C138"), Sheet2.Range("A141:C153"))

'excel to powerpoint paste loop
For x = LBound(MySlideArray) To UBound(MySlideArray)
MyRangeArray(x).Copy
Set shp = PPPres.Slides(MySlideArray(x)).Shapes.PasteSpecial(DataType:=2)
'adjust images
With PPPres.PageSetup
    shp.Left = (.SlideWidth \ 2) - (shp.Width \ 2)
    shp.Top = (.SlideHeight \ 2) - (shp.Height \ 2)
End With

Next x
Application.CutCopyMode = False
End Sub

1 个答案:

答案 0 :(得分:0)

原始问题缺少关于原始工作表是什么或做什么的一些细节, 如果它在另一个工作簿中,并且宏从另一个工作簿运行 您必须首先使用

创建新工作簿
dim wb as workbook
wb = application.workbooks.add

如果工作簿是现有工作簿,则使用open

set wb =  workbooks.open("templateWB.xls")

要获取所需的特定工作表,如果您刚刚从废料中创建了新工作簿,则可以使用第一张工作表:

dim ws as worksheet
ws =wb.worksheets(1)

或从废料中创建一个

dim ws as worksheet
set ws = wb.worksheets.add

将ws变量发送到您的宏

grandFinale ws

然后,您需要修改您的sub以将工作表作为参数

Sub grandFinale(tempsheet as Worksheet)
代码中的

更改了Tempsheet中所有出现的Sheet2或您使用的变量名称。