2017-08-20 51 views
1

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

我测试了输出工作表本身的代码,它工作。

Output when Macro works

然而,当在Excel模板中真正执行宏失败。

Output when Macro fails

我需要定义输出表作为对象变量?我如何在Excel到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

对我来说似乎是,您现在正从包含该宏的工作簿的工作表Sheet2中进行复制。您不会显示打开另一个(模板)工作簿的代码,但我认为它就像Set wk = Workbooks.Open(“C:\ test.xlsx”)。如果是这样的话,你需要在工作簿中引用你想要的工作表,像Set sh = wk.Worksheets(“nameOfSheet”),然后用sh替换你的代码中的Sheet2(首先用Dim wk定义变量为Workbook,工作表) –

回答

0

原来的问题缺少一些细节,以什么原来的工作表或确实, 如果它是另一个工作簿,并且宏是从其他工作簿跑 则必须先

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

如果工作簿现有工作簿使用开放而不是

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 grandFinale(tempsheet as Worksheet) 

在您的代码中更改了所有出现的Sheet2的tempsheet或您使用的变量名称。

+0

原始工作表位于另一个Excel工作簿中,并从该工作簿运行宏。该宏采用原始工作表并将粘贴值执行到新工作簿中,并使用粗体文本,更改字体,合并单元格等任务重新格式化数据。新工作簿的Sheet2是6张工作表中的1个。 @Tony M我用一些使用记录宏创建的旧代码来打开新的工作簿,所以我必须声明它。我会检查更新! –

+1

感谢流程图@jlucero,它帮助让宏工作,尽管我认为第一行中的“db”应该是“wb”。我使用了工作簿。添加方法以打开新工作簿并将其作为上述宏的MyRangeArray元素中的对象引用。我还删除了大量的记录宏代码,并将其中的grandFinale()是一个宏的多宏缩减为一个宏。这有助于简化事情。 –

相关问题