• ベストアンサー

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

お世話になります。 Excelにてあるツールを運用しているのですが、 セルのコピー・貼り付けを不可にする機能はないでしょうか? で、そのExcelを終了する際には可に復元するという動きが理想です。 みなさま、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 '-----------------------------------------------------------------

motsu2006
質問者

お礼

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

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんぱんは。 >FindControl(, 19).Enabled = Cmd_bln 'Copy >↑上記ステップにて >実行時エラー'91': >オブジェクト変数または With ブロック変数が設定されていません。 少し、時間をください。一応、Excelのバージョンを教えておいてください。 それは、たぶん、ここの部分です。 For Each cmd In Array(1, 20, 24, 25) Indexの番号にしたのが間違いでした。それは、Excel全バージョンで共通ではないようです。

motsu2006
質問者

補足

再度のご回答、本当にありがとうございます。 試したのはExcel2002(自宅PC)です。 しかし、実際に実行したいのは会社の環境で、ほとんどが2003ですが2002も少数ながら混在しています。 よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#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 '-----------------------------------------------------------------

motsu2006
質問者

補足

コメントが遅くなって大変申し訳ありませんでした。 ご回答いただいた通りに記述してみましたが、 オープン時・クローズ時に .FindControl(, 19).Enabled = Cmd_bln 'Copy ↑上記ステップにて 実行時エラー'91': オブジェクト変数または With ブロック変数が設定されていません。 となります。 どのように変更すればよろしいでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

プロテクトの一環として考えてよろしいのでしょうか? もし、そうでしたら、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)
回答No.2

マクロでもいいなら下記のサイトが参考になります。 http://www.excel7.com/trouble19.htm

motsu2006
質問者

お礼

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

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

セルのコピー・貼り付けは不可だけど、入力はOKにしたいということですか? それなら入力を許すセルを「書式」、「セル」、「保護」でロックのチェックを外し、「ツール」でシート保護をかけてください。

motsu2006
質問者

お礼

ご回答ありがとうございます。 しかし、これでは無理のようです(すみません)。

関連するQ&A

専門家に質問してみよう