あるワークシートから別のワークシートにデータをコピー/貼り付けして、多数のスプレッドシートを生成するプログラムをExcelで作成しています(例:生成されたワークシートにコピー/貼り付けされるヘッダー/フッターセルを含む「レイアウト」ワークシートを使用) )。
私の問題は、時々(毎回ではない)、「生成プロセス」を実行すると、Excelがこのエラーを生成することです(申し訳ありませんが、これは私のフランス語のExcelエラーからの英語の翻訳です):
エラー1004:「_Worksheet」オブジェクトの「Paste」メソッドが失敗しました
だから私はクリップボードに問題があると思います(おそらく同時にクリップボードを使用した私のコンピューター上の他のソフトウェアで:/)
私は最初に、次のようなコードを使用して、クリップボードを使用せずにセル(およびその他のもの)をコピー/貼り付けする方法を見つけようとします:
ThisWorkbook.Sheets("Layout").Range("A1").Copy Destination:=ThisWorkbook.Sheets("Test").Range("A1")
またはその
ThisWorkbook.Sheets("Test").Range("A1") = ThisWorkbook.Sheets("Layout").Range("A1")
しかし、テキストまたは数式のみをコピーでき、すべてのもの(境界線、色など)はコピーできず、Chartオブジェクト(私は1つ持っています)もコピーできないようです!
だから私はコピー/貼り付け中にクリップボードをロック/ロック解除する方法を見つけようとしています。私はそれを行うためにこのコードを見つけました:
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に戻り、セルをコピーして貼り付け、メモ帳に戻ってから、メモ帳にアクセスできます。クリップボード;そして私はクリップボードを明示的にロック解除していません)。それは私にとって本当に問題ではありません。
クリップボードをロックした後、Chartオブジェクトを(手動またはマクロを使用して)コピー/貼り付けすることはできません。マクロを使用すると、以前とまったく同じエラーが発生します)。
それで、クリップボードをロック/ロック解除してチャートオブジェクトをコピーする方法についてのアイデアとして誰かがいますか?または、クリップボードを使用せずにそれらをコピーするには?
編集:
グラフオブジェクトをコピーして貼り付けるために使用されるコード:
Utils_Clipboard.Lockk
ThisWorkbook.Sheets("Layout").ChartObjects("CHART_TEMPLATE").Copy
DoEvents
worksheet_p.Paste Destination:=where_p
Utils_Clipboard.Unlockk
ここで、worksheet_pはWorksheetオブジェクト、adnwhere_pは範囲です。最初と最後の行がない場合(クリップボードをロックする)、正常に機能していることに注意してください(しばらくの間を除く)。