VBA コピーペースト(コピペ)を禁止する方法 - Excel ホームページ制作 | 墨田区

VBA コピーペースト(コピペ)を禁止する方法 – Excel

LINEで送る
Pocket

Excel VBA コピペを禁止する方法 VBAでコピー&ペーストを禁止する方法
ご紹介します。

社内ツールとして利用価値が高い Excel ですが、その分利用される方の経験と年代も様々ですね。年配の方や、普段あまりパソコンを利用しない方などが間違ってコピペして、他の人が記入した欄が消えてしまった・・・なんて声もしばしば聞かれます。そうなると、コピペを禁止するよう制御できないかと考えたりするのが管理者の方のお仕事だったりしますね。

ここでは、VBAでコピペを禁止する方法をご紹介します。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


コピペの禁止方法

まず、制御するに辺り、以下のことを考慮しなければなりません。

  1. Ctrl + C と Ctrl + V の制御
  2. 右クリックでのコピー & 貼り付け の制御
  3. メニューバーでのコピー & 貼り付け の制御

これを踏まえてコーディングしてみましょう。


サンプルソース

それでは、サンプルソースを見ながら解説していきます。

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", "Column", "Row")
    'ショートカット制御
    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
    
    'コマンドボタン制御
    For Each Cmd In CmdNames
        If Cmd = "Worksheet Menu Bar" Then
            With Application.CommandBars(Cmd).Controls(2)
                .Controls(3).Enabled = Enabled
                .Controls(4).Enabled = Enabled
                .Controls(5).Enabled = Enabled
            End With
        Else
            With Application.CommandBars(Cmd)
                .FindControl(, 19).Enabled = Enabled 'Copy
                .FindControl(, 22).Enabled = Enabled 'Paste
                .FindControl(, 21).Enabled = Enabled 'Cut
            End With
        End If
    Next Cmd
 End Sub

まず、標準モジュールを作成して、Auto_Open() 関数を作ります。
Auto_Open() は、Excel を開いたときに自動で実行されるコマンドです。

次に、先ほどの制御を組み込みます。
Application.OnKey を使って、ショートカットキーを制御します。
そして、Application.CommandBars 配列から該当のコマンドを探し出し制御します。

実行してみると、コピペができなくなっていることがわかると思います。


しかしながらこの方法だけですと、Office 2007以降の Excel では他の Excel やテキストなどでコピーされた情報が、右クリックやリボンの貼り付けボタンから張り付いてしまいます。厳密な制御を入れようとすると、Windows API を利用してクリップボードの値を判断することになりそうですね。

こちらのページでは、コピーされたセル範囲を取得する方法をご紹介しています。
VBA コピーされたセル範囲を取得する方法 – Excel

また、こちらのページでは、VBAでリボンを非表示にする方法をご紹介しています。
VBA リボンを非表示にする方法 – Excel, Word, Access

完全なコピペ禁止の参考になるかと思います。

完全なコピペの禁止の方法については、またの機会にご紹介いたします。

追記:
こちら のページに掲載しました。
>VBA 貼り付け(ペースト)を禁止する方法 – Excel

おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

Office / VBAの勉強が思うように進まないときは!

Office / VBAの勉強が思うように進まないのであれば、プロに直接質問ができる プログラミングスクール を検討してみてはいかがでしょうか?プログラミングスクールに申し込めば、短期間で一定のスキルを身に着けることができます!

Office / VBAコースあり!未経験者にウケてる KENスクール パソコンスクール・パソコン教室 【KENスクール】個別指導のWeb-DTP・OA・IT PCスクール

理解度や学習ペースに合わせて、一人ひとりが納得して前進できる授業を提供してくれるのが特徴です。特に課題製作は現場さながらで、実務に即したものとなっていますので短期でのスキルアップが望めます。自宅学習のサポートも充実していて、授業内容をいつでもビデオで振り返ることができるのもうれしいですね。好きな時間に好きな場所で、無理なくスケジューリングできるので、仕事の忙しい方でも柔軟に学ぶことができますよ。

更にさらに、なんと 就職サポート をしてくれるというのですから驚きです!!

履歴書の書き方から面接指導、求人の紹介など、具体的な就職先まで提案してくれるんです!私も「もっと早く出会いたかったなぁー、こんなスクール」・・・って思っちゃいました^^

東京・神奈川・愛知・大阪を営業エリアとされています。
まずは気軽に 無料体験予約 に申し込んでみるのもアリですよ。


コメント - Thank you for the comment.

  1.  

    コピペの禁止方法はよかったのですが,これを元に戻すVBAを教えて下さい。このままではずっとコピペができなくなります。そのbookのみコピペ禁止にしたいのですが…

    返信

     
    •  

      コメントありがとうございます。
      Auto_Close()イベントで CopyPasteCommandControl(True) を記述してください。
      Auto_Open()を記述したソースに、以下のコードを記述していただければOKです。
      Public Sub Auto_Close()
      Call CopyPasteCommandControl(True)
      End Sub
      ※掲載していたソースに追記しました。配慮が足りず申し訳ありません。
      対象のBookのみということは制御できないと思います。(少なくとも1インスタンス内(Excel.exe))
      このソースを組み込んだBook以外のBookを開きたい場合は Excel.exe をもう一つ起動して開く必要があると思います。
      インスタンスに関しては こちら が参考になると思います。
      また こちら のページも参考にしてみてください。

      返信

       

コメントを残す

お名前 (必須)
メールアドレス
(アドレスは公開されません)

コメント(必須)

Trackback URL