※結論に到達していません。未解決。
teratailで、Excelでペーストを禁止したい、それも特定セルや列だけという質問が出ていました。
興味あったので少し調べてみたところ、Google検索「excell イベント paste」でstackoverflowの下記質問が出てきて……
さらに、過去の下記質問回答が出てきました。
ここで提示されているのは、ワークシートのチェンジイベントで
- CommandBarの「"Standard"」→ Controls「"&Undo"」にあるアンドゥリストを見る。
- アンドゥリストの1番目、先頭が「Paste」で始まる項目があれば「ペースとしようとしている」ということが検出できる。
という方針。ま、このあと実際にはペーストをキャンセルできるかといった話があるのですが、残念ながら今使っているOffice2016の日本語版ではこの回答にあった下記サンプルコードはそのまま動きませんでした。
Private Sub Worksheet_Change(ByVal Target As Range) Dim UndoList As String '~~> Get the undo List to capture the last action performed by user UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1) '~~> Check if the last action was not a paste nor an autofill If Left(UndoList, 5) = "Paste" Then 'Do stuff End If End Sub
デバッガーで追ってみたところ、Application,CommandBarsの「"Standard" 」はItem(10)にあり、また、&UndoはCaptionプロパティ「元に戻す??(&)」としてItem(14)にあるので、日本語と英語の違いかと思ったのですがうまくアクセスできず。また、Undo項目の下に「List」が無い。
面白いアプローチだとおもったのですがバージョン依存か何かでダメなのか、それとも何か根本的な勘違いをしているのか。ちょっとしたパズルとして保留しておきます。