Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA-错误1004-方法类的CopyPicture失败_Vba_Excel - Fatal编程技术网

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

VBA-错误1004-方法类的CopyPicture失败,vba,excel,Vba,Excel,我需要一些代码方面的帮助。我编写了一个宏,它将许多表格作为图片从不同的Excel文件复制到PowerPoint,但有时它工作正常,有时出现错误1004-方法类的CopyPicture失败。这是我的密码: Sheets("List1").Select ' group chart ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1 ' select cells to be copied to PowerPoint: Range("

我需要一些代码方面的帮助。我编写了一个宏,它将许多表格作为图片从不同的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
我发现在
范围(“A1:X83”)之前插入
工作表(“列表1”)。
对某人很有帮助。选择
,但没有帮助。
我在工作中遇到了这个问题,我使用的是Office 2010。在家里,我有Office 2016,代码工作得非常完美


您是否有任何想法,如何使其在没有任何错误的情况下工作?

检查您的参考资料,以确保您调用的库是正确的

工具>参考


不确定您需要哪一个,但请确保已选中Microsoft Powerpoint xx.x诸如此类的内容。

放弃使用
的习惯。选择所有内容;这就是宏录制器代码所做的,但这只是因为宏录制器代码模仿每一个手动操作—在自动化Office时,实际上不需要重现手动执行任务时的每一次鼠标单击—而是使用Office应用程序的对象模型

因此,您可以关闭
工作表(“列表1”)
,并将特定的
范围
复制为图片:

Application.Worksheets("List1").Range("A1:X83").CopyPicture xlScreen, xlPicture
此代码比依赖于
选择的任何代码都更加健壮:您正在从特定的
范围
对象调用
.CopyPicture

所以剩下要做的就是粘贴:

pptSld.Shapes.Paste
请注意,这样你就不能合法地在上面做
。选择
——但你为什么要
。选择它呢

如果需要访问新创建的
Shape
对象,可以从
pptSld.Shapes
集合中检索该对象:

Dim excelScreenshot As Shape
Set excelScreenshot = pptSld.Shapes(pptSld.Shapes.Count)

然后,无论您希望如何使用
选择
,您现在都可以使用
Excel屏幕截图
——作为奖励,您可以通过使用强类型对象引用(而不是
对象
)获得IntelliSense和自动完成功能,这使得每个会员都打了一个迟到的电话——换句话说,你会得到更好的表现,不管它是多么的不引人注意。

作为一个评论,我觉得更合适,因为它更多的是一个提示,而不是一个可靠的答案。非常感谢你给出这样一个完整的答案。此代码适用于我,但现在我无法在幻灯片上对齐我的形状。我将此代码
Dim excelScreenshot用作形状集excelScreenshot=pptSld.Shapes(pptSld.Shapes.Count)excelScreenshot.Left=25 excelScreenshot.Top=100
,我得到的是“错误13-类型不匹配”@Pelmeshka不确定是哪条指令导致了该错误。确定导致问题的指令,使用调试器(断点/F9、单步执行/F8、本地工具窗口等)、对象浏览器/F2和Google&Stack Overflow来确定需要使用的实际类型。。。如果做不到这一点,请使用尽可能少的代码重现问题(请参阅),并提出新问题。