2017-04-04 972 views
1

我需要一些帮助,我的代码。我写了一个宏,它将许多表格复制为不同Excel文件中的图片到PowerPoint,但有时它完美地工作,并且有时出现错误1004 - 方法类的CopyPicture失败。这里是我的代码:VBA - 错误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 

我发现,有人是有帮助的Range("A1:X83").Select之前插入Sheets("List1").,但它并没有帮助。 我在工作中遇到了这个问题,我在那里使用Office 2010.在家里我有Office 2016和代码完美工作。

你有什么想法,如何使它工作没有任何错误?

回答

1

失去一切使用.Select的习惯;这就是宏记录器代码的作用,但仅仅是因为宏记录器代码模仿了每一个手动操作 - 当自动执行Office时,实际上并不需要手动执行任务时重现每次点击鼠标 - 而是使用Office应用程序的对象模型

</rant>

所以你工作过Worksheets("List1"),并复制specitic 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做 - 和作为奖励,您可以获得智能感知并使用强类型对象引用进行自动完成,而不是Object,这会使每个成员都调用迟到的呼叫 - 换句话说,您将获得更好的性能,但无法察觉有可能。

+0

非常感谢你这样一个完整的答案。此代码适用于我,但现在我无法在幻灯片上对齐我的形状。我正在使用此代码'Dim excelScreenshot As Shape Set excelScreenshot = pptSld.Shapes(pptSld.Shapes.Count)excelScreenshot。左= 25 excelScreenshot.Top = 100',我得到“错误13 - 类型不匹配” – Pelmeshka

+0

@ Pelmeshka不知道哪个指令导致该错误。确定哪个指令导致问题,使用调试器(断点/ F9,step-through/F8,本地工具窗口等),对象浏览器/ F2和Google&Stack Overflow来确定您需要使用的实际类型。 *失败*,用尽可能少的代码重现问题(参见[mcve]),并提出一个新问题。 –

+0

非常感谢你,现在正在工作! – Pelmeshka

0

检查您的参考资料以确保您正在调用正确的库。

工具>参考

不知道这对你的需要,但要确保你有微软Powerpoint XX.X等等等等等等检查。

+0

是的,我在那里微软Powerpoint添加 – Pelmeshka

+0

更好地作为评论,国际海事组织,因为它更多的是一个小费,而不是一个坚实的答案。 –

相关问题