尝试将图表,范围等插入word时,在Excel 2010 VBA中复制/粘贴时出错

Gra*_*lls 4 excel vba excel-vba

在研究这个错误时,我得出的结论是,它与剪贴板有关,不应该像我们使用2003时那样不应该是问题,但现在我们正在使用2010.(我还继承了这段代码)来自不在这里工作的人

运行时错误"4605":
此方法或属性不可用,因为剪贴板为空或无效.

这是我的代码:

Worksheets("Exec Sum").Range("B140:I186").Copy

With myDoc.Bookmarks
  .Item("b3").Range.PasteSpecial Link:=True, DataType:=wdPasteMetafilePicture, Placement:=bmark, DisplayAsIcon:=False
End With

' Clears Clipboard
Application.CutCopyMode = False
Run Code Online (Sandbox Code Playgroud)

我已经尝试过sendkeys("^ C"),首先选择一个空单元格,但没有运气.有没有办法我可以不使用复制/粘贴方法来执行此操作或以其他方式清除剪贴板?

sco*_*ott 7

我从2003年升级到2010年时开始出现此错误,但该宏在2003年仍然有效.

桌子在那里,但我注意到有时复制不起作用.由于这在调试模式下从未发生过,因此我在复制前增加了5秒的等待时间.

这使宏更慢,但至少它的工作原理.


小智 6

我还在测试我的解决方案,但它与提出的建议不同,到目前为止一直运行良好.只是一个不同的方法:

我添加了一个标签并围绕我尝试使用错误处理程序复制...

Pg1CopyAttempt:
    DoEvents
    shSomeSheet.Range("A1:G30").Copy
    On Error GoTo Pg1PasteFail
    WordApp.Selection.PasteExcelTable False, False, False
    On Error goto 0 'disable the error handler 
Run Code Online (Sandbox Code Playgroud)

我将标签称为"Pg1CopyAttempt",因为我知道Excel,由于我自己的错误,可能无法将其复制到剪贴板.如果Excel让我失望,直到我尝试粘贴时才会知道.当我尝试尝试时,当粘贴方法失败时,我会抛出错误处理程序(Pg1PasteFail).它位于我的例程的底部(在直接退出子或退出例程之后).

Pg1PasteFail:
If Err.Number = 4605 Then ' clipboard is empty or not valid.
    DoEvents
    Resume Pg1CopyAttempt
 End If
Run Code Online (Sandbox Code Playgroud)

以编程方式测试空剪贴板比依赖错误处理程序更好,但这里的想法是强制循环,以便它继续尝试复制,直到成功为止.对剪贴板进行编程测试的简单循环可以利用Sean的ClipboardEmpty函数(上图).DoEvents仍然被利用,但即使使用DoEvents,例程也会失败并且只是被指示继续尝试.