使用VBA复制/粘贴excel对象/形状时遇到问题

时间:2018-07-11 12:23:29

标签: vba excel-vba clipboard

我有一些复杂的代码,需要一些用户输入(要复制的形状名称),然后将所述形状从一张纸复制到另一张纸多次。这些项目是在Excel中绘制的分组形状,并且均正确且唯一地命名。

我间歇性地收到复制和粘贴错误“对象_Worksheet'的方法'粘贴'失败” “对象'_worksheet'的方法'复制'失败。通过研究我们知道这个问题很普遍,并且与在访问剪贴板时与Excel冲突的程序有关。

到目前为止,我和我的同事推断出,特别是两个程序对复制/粘贴操作的干扰最大-Adobe Reader和Autodesk Powershape。 (Autodesk和Adobe都在VBA中提供了参考库,不确定这是否是巧合吗?)

在我们打开程序时,该问题曾经经常发生,因此我们编写了以下宏/函数来尝试稳定代码:-

Public Sub CopyShape(ItemName, CopyDestination)

Call ClearClipboard Sheets(CopyDestination).Shapes(ItemName).Copy 

Do Until IsClipboardEmpty = False DoEvents Loop

End Sub

其中“ ClearClipboard”为:-

Public Function ClearClipboard() 

OpenClipboard (0&) 

EmptyClipboard

CloseClipboard 

End Function

并且函数IsClipboardEmpty是:-

Function IsClipboardEmpty() As Boolean 

IsClipboardEmpty = (CountClipboardFormats() = 0) 

End Function

具有以下公共声明:-

Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long 

Declare Function EmptyClipboard Lib "user32" () As Long 

Declare Function CloseClipboard Lib "user32" () As Long

Public Declare Function CountClipboardFormats Lib "user32" () As Long

此代码在很多时候都有效(比试图在复制操作后不幸失败而尝试使用“ DoEvents”要好得多),因为它强制代码在尝试粘贴之前检查复制的项目是否在剪贴板中它,但是它并不总是有效-后台的某些东西仍然使代码混乱。

有任何一种方式可以吗:-

  • 使用VBA或API锁定和解锁剪贴板?
  • 使用完全不同的复制和粘贴形状的方法?

任何和所有解决方案都欢迎,当然很高兴回答任何问题。

谢谢

0 个答案:

没有答案