VBA - 错误1004 - 方法类的CopyPicture失败

时间:2017-04-04 18:10:53

标签: excel vba excel-vba

我的代码需要一些帮助。我写了一个宏,它将许多表作为图片从不同的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,代码运行完美。

你有什么想法,如何让它没有任何错误?

2 个答案:

答案 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。