我有一个宏,它通过其独特的标签属性从一张幻灯片中获取形状,然后将其粘贴到另一张幻灯片上。
它可以在许多不同版本的操作系统(Win 7、8、8.1)和 PowerPoint 版本(2007、2010、2013、32 和 64 位)上按预期工作。
但是,我只有一个用户,由于剪贴板为空,粘贴命令失败。
为简单起见,这是返回形状的代码片段(我没有包含 ShapeByTag)函数:
Dim oShp as ShapeRange
ShapeByTag(TagName, TagValue).Copy
Set oShp = oSld.Shapes.Paste
当第二行出现错误时“-2147188160 Shapes (unknown member): Invalid request. Clipboard is empty or contains data which may not be paste here.” 我可以进入 VBE 并成功重新运行命令,向我表明存在时间问题。
但用户的机器是全新的 i5 Windows 8.1 Pro(64 位)笔记本电脑,配备 8GBRAM,比许多其他没有出现问题的用户机器更强大。他正在使用 PowerPoint 2013 32 位。
我可以通过这样做来克服这个问题:
Dim oShp as ShapeRange
ShapeByTag(TagName, TagValue).Copy
On Error Resume Next
RetryPaste:
Set oShp = oSld.Shapes.Paste
If Err <> 0 Then Err.Clear: GoTo RetryPaste
On Error Goto 0
但是为什么首先会发生错误?我本来预计 .Copy 方法会非常即时,并且在底层操作系统完成复制操作之前不会执行以下行。我还将添加一个 Timer 来查看实际注入了多长时间的延迟。