OKWaveコミュニティー

EXCEL、セルのコピー・貼り付けを禁止したい


新規ユーザー登録(無料)今すぐ登録しよう!!
はじめての方へ OKWaveではこんなことができます!

転職成功者続出!転職ならen!
人生をよくする就職!就職はen!
毎日情報更新!アルバイトならen!
特集
教えて!Say!病
人には聞けない病気の悩み、性感染症に関するQ&A!
クリスマスQ&A特集
寒い冬には暖かい恋を!気になるクリスマスの恋愛特集
OKWave新機能特集
画像や動画、音声を使って質問・回答をしてみよう!

質問

質問者:motsu2006 EXCEL、セルのコピー・貼り付けを禁止したい
困り度:
  • すぐに回答を!
お世話になります。

Excelにてあるツールを運用しているのですが、
セルのコピー・貼り付けを不可にする機能はないでしょうか?

で、そのExcelを終了する際には可に復元するという動きが理想です。

みなさま、教えてください。
質問投稿日時:06/07/05 10:37
質問番号:2256612
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:Wendy02 遅くなりました。

Excelの2002などで、試験していませんが、たぶん、標準モジュールの部分を入れ替えれば大丈夫なはずです。

'-----------------------------------------------------------------
Sub DisableCommandButtons(Cmd_bln As Boolean)
'コピー・貼り付けを停止させるサブルーチン・マクロ
 Dim cmd As Variant
 Dim Cmdb As Object
 Dim CmdNames As Variant
 CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row")
 'ショートカットのインスタンス
 If Cmd_bln = False Then
  Application.OnKey "^c", ""
  Application.OnKey "^v", ""
  Application.OnKey "^x", ""
 Else
  Application.OnKey "^c"
  Application.OnKey "^v"
  Application.OnKey "^x"
 End If
 'コマンドボタンのEnable
 For Each cmd In CmdNames
 If cmd = "Worksheet Menu Bar" Then
  With Application.CommandBars(cmd).Controls(2)
   .Controls(3).Enabled = Cmd_bln
   .Controls(4).Enabled = Cmd_bln
   .Controls(5).Enabled = Cmd_bln
  End With
 Else
  With Application.CommandBars(cmd)
   .FindControl(, 19).Enabled = Cmd_bln 'Copy
   .FindControl(, 22).Enabled = Cmd_bln 'Paste
   .FindControl(, 21).Enabled = Cmd_bln 'Cut
  End With
 End If
 Next cmd

End Sub
'-----------------------------------------------------------------
種類:回答
どんな人:経験者
自信:参考意見
回答日時:06/07/10 18:12
回答番号:No.6
この回答へのお礼できました!

本当、ありがとうございました。
せっかく教えていただいたソース、自分なりに分析して自分の知識にしていく所存です。
300ポイントほど差し上げたいところですが、システム上不可能なのが残念です。
心の中では20ポイントどころではない感謝をしていますので……。

回答

 

回答者:Wendy02 こんぱんは。

>FindControl(, 19).Enabled = Cmd_bln 'Copy
>↑上記ステップにて
>実行時エラー'91':
>オブジェクト変数または With ブロック変数が設定されていません。

少し、時間をください。一応、Excelのバージョンを教えておいてください。

それは、たぶん、ここの部分です。
For Each cmd In Array(1, 20, 24, 25)

Indexの番号にしたのが間違いでした。それは、Excel全バージョンで共通ではないようです。
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:06/07/08 23:53
回答番号:No.5
この回答への補足再度のご回答、本当にありがとうございます。

試したのはExcel2002(自宅PC)です。
しかし、実際に実行したいのは会社の環境で、ほとんどが2003ですが2002も少数ながら混在しています。

よろしくお願いします。
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:Wendy02 #3 の訂正です。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 With Worksheets("Sheet1")
    'プロテクトの保護を解除すれば、コピー等は出来ます。
    .Unprotect Password:="xxx" '←ここ
    'パスワードを入れればパスワードが必要でした。
 End With
End Sub


なお、Application.CutCopyMode での制御は、少なくとも、Copy は効きます。
貼り付け場所を制限させるだけですから、あまり芳しくありません。

このほかにも、プロテクトせずに、ExcelのCopy/Paste のすべての機能を不可にする方法があります。

なお、以下をそれぞれのモジュールに貼り付けたら、一旦、保存して起動してください。これは、すべてのシートに適用されます。そのブックを閉じれば、機能は回復します。なお、私は、ひさびさに、この種のマクロを書いたので、抜け落ちがあるかもしれませんが、その時は、ご容赦願います。十分にテストをしてみてください。

'-----------------------------------------------------------------
'標準モジュール
Sub DisableCommandButtons(Cmd_bln As Boolean)
'コピー・貼り付けを停止させるサブルーチン・マクロ
 Dim cmd As Variant
 Dim Cmdb As Object
 'ショートカットのインスタンス
 If Cmd_bln = False Then
  Application.OnKey "^c", ""
  Application.OnKey "^v", ""
  Application.OnKey "^x", ""
 Else
  Application.OnKey "^c"
  Application.OnKey "^v"
  Application.OnKey "^x"
 End If
 'コマンドボタンのEnable
 For Each cmd In Array(1, 20, 24, 25) '"Menubar","Cell","Column","Row"
 If cmd = 1 Then
  With Application.CommandBars(cmd).Controls(2)
   .Controls(3).Enabled = Cmd_bln
   .Controls(4).Enabled = Cmd_bln
   .Controls(5).Enabled = Cmd_bln
  End With
 Else
  With Application.CommandBars(cmd)
   .FindControl(, 19).Enabled = Cmd_bln 'Copy
   .FindControl(, 22).Enabled = Cmd_bln 'Paste
   .FindControl(, 21).Enabled = Cmd_bln 'Cut
  End With
 End If
 Next cmd

End Sub
'-----------------------------------------------------------------
'ThisWorkbook モジュールへ
Private Sub Workbook_Open()
 Call DisableCommandButtons(False)
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Call DisableCommandButtons(True)
End Sub
'-----------------------------------------------------------------
種類:回答
どんな人:経験者
自信:参考意見
回答日時:06/07/05 21:38
回答番号:No.4
この回答への補足コメントが遅くなって大変申し訳ありませんでした。

ご回答いただいた通りに記述してみましたが、
オープン時・クローズ時に

.FindControl(, 19).Enabled = Cmd_bln 'Copy
↑上記ステップにて
実行時エラー'91':
オブジェクト変数または With ブロック変数が設定されていません。

となります。

どのように変更すればよろしいでしょうか?
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:Wendy02 プロテクトの一環として考えてよろしいのでしょうか?
もし、そうでしたら、VBEditor 画面を開いて、ThisWorkbook モジュールに、以下のようなマクロを登録します。一旦保存して、再度立ち上げれば、設定されています。セルの選択が出来ませんから、当然、コピーが出来ません。

'ThisWorkbook モジュール

Private Sub Workbook_Open()
 With Worksheets("Sheet1")
    'ロックしていないセルのみ許可
    .EnableSelection = xlUnlockedCells
    .Protect Password:="xxx", UserInterfaceOnly:=True
  End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 With Worksheets("Sheet1")
    'プロテクトの保護を解除すれば、コピー等は出来ます。
    .Unprotect
 End With
End Sub.
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:06/07/05 13:56
回答番号:No.3
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答10pt

回答者:mshr1962 マクロでもいいなら下記のサイトが参考になります。
http://www.excel7.com/trouble19.htm
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:06/07/05 11:07
回答番号:No.2
この回答へのお礼ご回答、ありがとうございます。

マクロで対応するつもりでいました。
他の機能についても大変参考になりました。
が、目的については正常に機能せず……。

回答

 

回答者:merlionXX セルのコピー・貼り付けは不可だけど、入力はOKにしたいということですか?
それなら入力を許すセルを「書式」、「セル」、「保護」でロックのチェックを外し、「ツール」でシート保護をかけてください。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:06/07/05 10:44
回答番号:No.1
この回答へのお礼ご回答ありがとうございます。

しかし、これでは無理のようです(すみません)。
最新から表示回答順に表示良回答のみ表示
関連Q&A