我真的很挣扎,我似乎无法找到我的代码不起作用的原因:
Dim i1 As Integer
Dim PPapp As Object, XLapp As Object
Dim slide1 As Slide, slide2 As Slide, slide3 As Slide
Dim PPoutput As Presentation
Dim output_table As ShapeRange
Set PPapp = New PowerPoint.Application
Set XLapp = Excel.Application
Set PPoutput = PPapp.Presentations.Open("Q:\SDPMaler\blank.potx", untitled:=msoTrue, withwindow:=msoTrue)
Set slide1 = ppoutput.Slides.AddSlide(1, ppoutput.SlideMaster.CustomLayouts(13))
XLapp.ActiveWorkbook.Sheets("PPT output").Range("y4:ae11").Copy
Set output_table = slide1.Shapes.PasteSpecial(ppPasteJPG, msoFalse, "", 1, "", msoTrue)
这里我的代码失败了:宏创建了powerpoint,在正确的布局中添加了幻灯片,甚至将表格作为图片过去
.PasteSpecial(DataType:=ppPasteOLEObject, link:=msoTrue)
以相同的方式工作,但是在我粘贴的代码的最后一行得到“运行时错误'13':类型不匹配”。虽然#13通常很容易找到错误,但这次我真的很困难。 希望可以有人帮帮我 谢谢 P.S。:我正在使用Office 2010并在Excel中运行宏
答案 0 :(得分:1)
我的猜测:
改变这个:
Dim output_table As ShapeRange
要:
Dim output_table As PowerPoint.ShapeRange
假设您已设置对PowerPoint的引用,或
Dim output_table As Object
如果您正在使用后期绑定
通过在Excel中将其变暗为ShapeRange,您创建了一个变量来保存Excel形状范围,但是当您粘贴到PPT中时,会得到一个PowerPoint形状范围,这会导致类型不匹配。
答案 1 :(得分:0)
我猜测.PasteSpecial函数没有返回ShapeRange,因此当您尝试将.PasteSpecial的结果赋值为声明为ShapeRange对象的变量(output_table)时,会出现类型不匹配。
尝试将Dim output_table作为Variant,然后通过查看TypeName(output_table)来调试它 - 如果你甚至需要PasteSpecial的结果。