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"),首先选择一个空单元格,但没有运气.有没有办法我可以不使用复制/粘贴方法来执行此操作或以其他方式清除剪贴板?
我从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,例程也会失败并且只是被指示继续尝试.