我尝试从Excel粘贴到完成的PowerPoint演示文稿。我从Peltier Tech和Spreadsheet Guru那里获取了一些代码。该宏旨在在Excel模板中工作,该模板生成另一个Excel工作表,然后将其粘贴到PowerPoint中。
我已经在输出工作表中测试了代码并且它可以正常工作。
但是,当在Excel模板中执行宏时,它会失败。
我是否需要将输出工作表定义为对象变量?如何在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
答案 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或您使用的变量名称。