トップ回答者
【Excel VBA】Application.CutCopyMode プロパティの挙動について質問と相談

質問
-
お世話になります。
Excelにおける、Application.CutCopyMode プロパティの挙動について質問と相談になります。
マクロを組み込んだBook(以下ブックA)があり、ワークシート上の任意の数のセルを手動でコピーし、
マクロを組み込んでいない、新しく立ち上げたBook(以下ブックB)にペーストしたのですが、ペーストできませんでした。ブックAにはワークブックが非アクティブ時処理として、ドラッグ&ドロップの制限解除を実行していますが、
どうもこの際にApplication.CutCopyModeがFalseとなることがわかりました。【質問と相談】
1.Application.CutCopyModeをFalseにしていないのに、Application.CellDragAndDropを制御した
だけで、Application.CutCopyModeがFalseとなるのは仕様でしょうか?バグでしょうか?
2.Workbook_Deactivate時の処理は残したまま
上記の操作でブックBにペーストを可能にする方法を教えてください。
'---ワークブック非アクティブ処理---
Private Sub Workbook_Deactivate()
Debug.Print "コピーモード:" & Application.CutCopyMode '...1 Trueが返る
'ドラッグ&ドロップの制限解除
Application.CellDragAndDrop = TrueDebug.Print "コピーモード:" & Application.CutCopyMode '...0 Falseが返る
End Sub
'--------------------
---システム環境---
OS:Windows7 64bit
Office2013 32bit
回答
-
Application.CutCopyModeがFalseとなるのは仕様でしょうか?バグでしょうか?
クリップボード操作にもドラッグアンドドロップにも、そのデータ交換には「IDataObject」というインターフェイスが共通して使われていますので、機能的に繋がりはありそうですね。ただ、ここは公式回答を得るための場では無いので、仕様か不具合かは誰にも答えられないでしょう。
上記の操作でブックBにペーストを可能にする方法を教えてください。
コピー準備中の状態に留めておくのではなく、実際にクリップボードに送り込んでしまうという手があります。
Option Explicit Private dataObj As MSForms.DataObject Private Sub Workbook_Deactivate() If Application.CutCopyMode <> 0& Then 'クリップボードの中身を取り出しておく Set dataObj = New MSForms.DataObject dataObj.GetFromClipboard Else Set dataObj = Nothing End If 'ドラッグ&ドロップの制限解除 Application.CellDragAndDrop = True If Not dataObj Is Nothing Then 'クリップボードに再送 dataObj.PutInClipboard End If End Sub
※注: Cut 操作であったとしても、Copy 相当の動作になります。
- 回答としてマーク snipe_9 2015年7月15日 4:26
すべての返信
-
Application.CutCopyModeがFalseとなるのは仕様でしょうか?バグでしょうか?
クリップボード操作にもドラッグアンドドロップにも、そのデータ交換には「IDataObject」というインターフェイスが共通して使われていますので、機能的に繋がりはありそうですね。ただ、ここは公式回答を得るための場では無いので、仕様か不具合かは誰にも答えられないでしょう。
上記の操作でブックBにペーストを可能にする方法を教えてください。
コピー準備中の状態に留めておくのではなく、実際にクリップボードに送り込んでしまうという手があります。
Option Explicit Private dataObj As MSForms.DataObject Private Sub Workbook_Deactivate() If Application.CutCopyMode <> 0& Then 'クリップボードの中身を取り出しておく Set dataObj = New MSForms.DataObject dataObj.GetFromClipboard Else Set dataObj = Nothing End If 'ドラッグ&ドロップの制限解除 Application.CellDragAndDrop = True If Not dataObj Is Nothing Then 'クリップボードに再送 dataObj.PutInClipboard End If End Sub
※注: Cut 操作であったとしても、Copy 相当の動作になります。
- 回答としてマーク snipe_9 2015年7月15日 4:26
-