我正在 Excel 下编写一个程序,该程序通过将一些数据从一个工作表复制/粘贴到另一个工作表来生成大量电子表格(例如:使用带有一些页眉/页脚单元格的“布局”工作表,这些单元格将被复制/粘贴到生成的工作表)。
我的问题是,有时(不是每次),在运行我的“生成过程”时,Excel 会生成此错误(抱歉,这是我的法语 Excel 错误的英文翻译):
错误 1004:“_Worksheet”对象的“粘贴”方法失败
所以我假设剪贴板有问题(我电脑上的其他软件可能同时使用了剪贴板:/)
我首先尝试找到一种方法来复制/粘贴我的单元格(和其他东西)而不使用剪贴板,代码如下:
ThisWorkbook.Sheets("Layout").Range("A1").Copy Destination:=ThisWorkbook.Sheets("Test").Range("A1")
或者那个
ThisWorkbook.Sheets("Test").Range("A1") = ThisWorkbook.Sheets("Layout").Range("A1")
但似乎我们只能复制文本或公式,而不是所有的东西(边框,颜色,......),也不能复制图表对象(我有)!
所以我试图找到一种在复制/粘贴过程中锁定/解锁剪贴板的方法。我发现这段代码可以做到这一点:
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Public Sub Lockk()
If OpenClipboard(0) = 0 Then
MsgBox "cannot open clipboard."
ElseIf EmptyClipboard() = 0 Then
MsgBox "cannot clear clipboard."
End If
End Sub
Public Sub Unlockk()
CloseClipboard
End Sub
复制单元格时似乎工作:我可以将剪贴板锁定在excel下,转到另一个软件(例如记事本),并且无法将某些数据复制粘贴到该软件中;返回 excel,我可以复制/粘贴数据(手动或使用宏)。
但:
似乎粘贴单元格会解锁剪贴板(我可以锁定,转到记事本,记事本无法访问剪贴板,返回excel,复制/粘贴单元格,返回记事本,然后记事本可以访问剪贴板;而且我还没有明确解锁剪贴板)。这对我来说真的不是问题。
锁定剪贴板后,我们无法复制/粘贴图表对象(手动或使用宏)。使用宏,我得到与以前完全相同的错误)。
那么,有人知道如何锁定/解锁剪贴板以复制图表对象吗?或者在不使用剪贴板的情况下复制它们?
编辑:
用于复制/粘贴图形对象的代码:
Utils_Clipboard.Lockk
ThisWorkbook.Sheets("Layout").ChartObjects("CHART_TEMPLATE").Copy
DoEvents
worksheet_p.Paste Destination:=where_p
Utils_Clipboard.Unlockk
其中 worksheet_p 是 Worksheet 对象,而 where_p 是范围。请注意,没有第一行和最后一行(锁定剪贴板),它工作正常(除了一些时间)。