VBA 貼り付け(ペースト)を禁止する方法 - Excel
VBAで貼り付け(ペースト)を禁止する方法をご紹介します。
以前の方法では、実行している Excel 以外からコピーされた場合、右クリックやリボンで貼り付けができてしまうと説明しました。
今回は VBAで完全に貼り付けができなくなる方法 の紹介です。ただし色々と制限がありますので、ご利用の際には十分検討してください。
貼り付けの禁止方法
以前の コピペを禁止する方法 でもご紹介しましたが、貼り付けコマンドを利用不可にするには、以下を考慮する必要があります。
- ショートカットキー(Ctrl + V) の制御
- 右クリックでの貼り付け の制御
- メニューバー(リボン) での貼り付け の制御
リボンを非表示
まず、メニューバー(リボン)での貼り付けを制御するには、リボンを非表示にします。
以下のページを参考に、リボンを非表示にしてください。
右クリックを制御
次に右クリックを制御します。右クリックできるのは「行選択時」、「列選択時」、それと「セル選択時」ですね。これらを全て無効にします。標準モジュールに以下のソースを記載します。
Application.CommandBars("Row").Enabled = False ' 行選択時、右クリック無効
Application.CommandBars("Column").Enabled = False ' 列選択時、右クリック無効
Application.CommandBars("Cell").Enabled = False ' セル選択時、右クリック無効
サンプルソース
ソースの全体を掲載しておきます。標準モジュールに以下のソースを貼り付けてください。
Option Explicit
'**
' オープン
'**
Public Sub Auto_Open()
' コピペの制御
Call CopyPasteCommandControl(False)
End Sub
'**
' クローズ
'**
Public Sub Auto_Close()
' コピペの制御
Call CopyPasteCommandControl(True)
End Sub
'**
' コピー&ペーストの制御
' 引数 true:利用可, false: 利用不可
'**
Public Sub CopyPasteCommandControl(Enabled As Boolean)
Dim Cmd As Variant
Dim CmdNames As Variant
CmdNames = Array("Worksheet Menu Bar", "Cell")
'ショートカット
If Enabled = False Then
Application.OnKey "^c", ""
Application.OnKey "^v", ""
Application.OnKey "^x", ""
Else
Application.OnKey "^c"
Application.OnKey "^v"
Application.OnKey "^x"
End If
' 右クリック禁止
Application.CommandBars("Row").Enabled = Enabled
Application.CommandBars("Column").Enabled = Enabled
Application.CommandBars("Cell").Enabled = Enabled
End Sub
Auto_Open()
は、マクロが起動された時の最初の動作です。
マクロを有効にする必要があります。
ここでショートカットキーと右クリックを利用不可にします。
Auto_Close()
は、ブックを閉じる直前に実行されるマクロです。ここでショートカットキーと右クリックを利用可にします。
まとめ
これで貼り付けが禁止されました。
しかし、リボンは使えない、右クリックも使えないとなると問題も出てきます。例えば色を付けたり、フォントサイズを変えたりなどの操作ができなくなります。
計算式などが入っているセルは「シートの保護」保護されている前提です。
リボンはクリップボードだけを非表示にして、ユーザーが利用する必要なものは表示しておくなどの考慮が必要かもしれませんね。
リボンのカスタマイズについては「Excel リボン非表示 カスタマイズ方法」を参照ください。おつかれさまでした。