- ベストアンサー
EXCEL、セルのコピー・貼り付けを禁止したい
お世話になります。 Excelにてあるツールを運用しているのですが、 セルのコピー・貼り付けを不可にする機能はないでしょうか? で、そのExcelを終了する際には可に復元するという動きが理想です。 みなさま、教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
遅くなりました。 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 '-----------------------------------------------------------------
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんぱんは。 >FindControl(, 19).Enabled = Cmd_bln 'Copy >↑上記ステップにて >実行時エラー'91': >オブジェクト変数または With ブロック変数が設定されていません。 少し、時間をください。一応、Excelのバージョンを教えておいてください。 それは、たぶん、ここの部分です。 For Each cmd In Array(1, 20, 24, 25) Indexの番号にしたのが間違いでした。それは、Excel全バージョンで共通ではないようです。
補足
再度のご回答、本当にありがとうございます。 試したのはExcel2002(自宅PC)です。 しかし、実際に実行したいのは会社の環境で、ほとんどが2003ですが2002も少数ながら混在しています。 よろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
#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 '-----------------------------------------------------------------
補足
コメントが遅くなって大変申し訳ありませんでした。 ご回答いただいた通りに記述してみましたが、 オープン時・クローズ時に .FindControl(, 19).Enabled = Cmd_bln 'Copy ↑上記ステップにて 実行時エラー'91': オブジェクト変数または With ブロック変数が設定されていません。 となります。 どのように変更すればよろしいでしょうか?
- Wendy02
- ベストアンサー率57% (3570/6232)
プロテクトの一環として考えてよろしいのでしょうか? もし、そうでしたら、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.
- mshr1962
- ベストアンサー率39% (7417/18945)
マクロでもいいなら下記のサイトが参考になります。 http://www.excel7.com/trouble19.htm
お礼
ご回答、ありがとうございます。 マクロで対応するつもりでいました。 他の機能についても大変参考になりました。 が、目的については正常に機能せず……。
- merlionXX
- ベストアンサー率48% (1930/4007)
セルのコピー・貼り付けは不可だけど、入力はOKにしたいということですか? それなら入力を許すセルを「書式」、「セル」、「保護」でロックのチェックを外し、「ツール」でシート保護をかけてください。
お礼
ご回答ありがとうございます。 しかし、これでは無理のようです(すみません)。
お礼
できました! 本当、ありがとうございました。 せっかく教えていただいたソース、自分なりに分析して自分の知識にしていく所存です。 300ポイントほど差し上げたいところですが、システム上不可能なのが残念です。 心の中では20ポイントどころではない感謝をしていますので……。