我的代码需要一些帮助。我写了一个宏,它将许多表作为图片从不同的Excel文件复制到PowerPoint,但有时它工作得很好,有时会出现错误1004 - 方法类的CopyPicture失败。这是我的代码:
Sheets("List1").Select
' group chart
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
' select cells to be copied to PowerPoint:
Range("A1:X83").Select
' copy cells:
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
' paste to PowerPoint:
pptSld.Shapes.Paste.Select
我发现有人在Sheets("List1").
之前插入Range("A1:X83").Select
很有帮助,但它没有帮助。
我在工作中遇到这个问题,我正在使用Office 2010.在家里,我有Office 2016,代码运行完美。
你有什么想法,如何让它没有任何错误?
答案 0 :(得分:1)
不再习惯使用.Select
;这就是宏录制器代码的作用,但仅仅因为宏录制器代码模仿了每个手动操作 - 当自动化Office时,您实际上不需要重现手动执行任务时所做的每次鼠标点击 - 而是使用Office应用程序的对象模型。
</rant>
因此,您要关闭Worksheets("List1")
,并将特定的Range
复制为图片:
Application.Worksheets("List1").Range("A1:X83").CopyPicture xlScreen, xlPicture
此代码比依赖Selection
的任何代码都强大得多:您从特定的.CopyPicture
对象调用Range
。
所以剩下要做的就是粘贴:
pptSld.Shapes.Paste
请注意Paste
is a method that doesn't return anything,因此您无法合法地对其进行.Select
- 但您为什么还要.Select
呢?
如果您需要访问新创建的Shape
对象,可以从pptSld.Shapes
集合中检索它:
Dim excelScreenshot As Shape
Set excelScreenshot = pptSld.Shapes(pptSld.Shapes.Count)
然后使用Selection
进行任何操作,您现在可以使用excelScreenshot
- 作为奖励,您可以获得 IntelliSense 和自动完成功能强类型对象引用,而不是Object
,它使每个成员调用一个后期绑定调用 - 换句话说,你将获得更好的性能,但它可能是不明显的。
答案 1 :(得分:0)
检查您的参考文献,确保您正在调用正确的库。
工具&gt;参考
不确定您需要哪个,但请确保已检查Microsoft Powerpoint xx.x blah blah blah。