Excel CopyPicture有时在选择一组形状后抛出错误

Excel CopyPicture有时在选择一组形状后抛出错误,excel,vba,Excel,Vba,这个Excel程序已经运行了多年(!),但现在让我感到困惑。我正在尝试复制三张图表的图像,在工作表上分组为组8。该例程循环通过选定的数据集,将每个样本打印为批处理作业。所以从历史上看,我只是能够: ActiveSheet.Shapes.Range("Group 8").Select Selection.CopyPicture xlScreen, xlPicture 但乐趣开始了。从工作表运行此宏时会出现400错误。直接从代码表运行,给出一个 1004-应用程序定义或obj定

这个Excel程序已经运行了多年(!),但现在让我感到困惑。我正在尝试复制三张图表的图像,在工作表上分组为
组8
。该例程循环通过选定的数据集,将每个样本打印为批处理作业。所以从历史上看,我只是能够:

ActiveSheet.Shapes.Range("Group 8").Select
Selection.CopyPicture xlScreen, xlPicture
但乐趣开始了。从工作表运行此宏时会出现400错误。直接从代码表运行,给出一个

1004-应用程序定义或obj定义的错误

但是在
Select
语句上使用断点运行并单步执行
CopyPicture
,它是有效的。在我的笔记本电脑上运行,它就像工作表宏一样工作。在我同事的桌面上运行,一切正常。仅以单行宏的形式运行
CopyPicture
命令即可

其他线程表明MS已经摆弄了剪贴板,但通过各种代码执行延迟策略,其他线程的问题得到了解决。这里没有乐趣,例如,“睡500毫秒”。有什么想法吗?他们能制造出超强的力量吗

好吧,这会很奇怪。我在V.Arya发布的MS社区帖子中找到了一个有效的解决方案。这似乎是一个剪贴板(?)延迟。插入行

Do: DoEvents: Loop Until Application.Ready

之前的
CopyPicture
解决了问题。然而,我仍然对任何见解感兴趣。

使用
Select
始终是一种风险,因为它不太可靠。很明显,这个问题的出现是因为在选择您的组和准备拍照的应用程序之间有一个时间间隔,所以我不明白您到底想要什么。你已经给了自己正确的答案
Select
太慢(在某些情况下,或在某些计算机上),您必须确保拍照前应用程序已准备就绪。您可以使用找到的代码来完成此操作。这里不再有魔法了。如果你还有问题,请澄清。谢谢你的回答,佩赫。我确实找到了一个解决办法,但我很好奇其他人是否对“新的”剪贴板问题有更多的了解。此外,您和其他线程建议不要使用“选择”方法,这是不可靠的。当我使用替代编码而不选择:ActiveSheet.Shapes.Range(“Group 8”).CopyPicture xlScreen、xlPicture时,会出现“对象不支持此属性或方法”错误。你的建议在这里会有帮助的。另外,我不知道这段代码将如何处理剪贴板延迟。是的,在某些情况下,
.Select
是无法避免的。但在这些情况下,它可能是不可靠的。因此,此循环将一直运行,直到应用程序准备好进行复制为止
DoEvents
只是意味着如果需要,给Excel时间来执行任何事件。使用
Select
始终是一种风险,因为它不太可靠。很明显,这个问题的出现是因为在选择您的组和准备拍照的应用程序之间有一个时间间隔,所以我不明白您到底想要什么。你已经给了自己正确的答案
Select
太慢(在某些情况下,或在某些计算机上),您必须确保拍照前应用程序已准备就绪。您可以使用找到的代码来完成此操作。这里不再有魔法了。如果你还有问题,请澄清。谢谢你的回答,佩赫。我确实找到了一个解决办法,但我很好奇其他人是否对“新的”剪贴板问题有更多的了解。此外,您和其他线程建议不要使用“选择”方法,这是不可靠的。当我使用替代编码而不选择:ActiveSheet.Shapes.Range(“Group 8”).CopyPicture xlScreen、xlPicture时,会出现“对象不支持此属性或方法”错误。你的建议在这里会有帮助的。另外,我不知道这段代码将如何处理剪贴板延迟。是的,在某些情况下,
.Select
是无法避免的。但在这些情况下,它可能是不可靠的。因此,此循环将一直运行,直到应用程序准备好进行复制为止
DoEvents
只是指如果需要,给Excel时间执行任何事件。