プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

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

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

みなさま、教えてください。

A 回答 (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
'-----------------------------------------------------------------
    • good
    • 0
この回答へのお礼

できました!

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

お礼日時:2006/07/10 19:59

こんぱんは。



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

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

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

Indexの番号にしたのが間違いでした。それは、Excel全バージョンで共通ではないようです。

この回答への補足

再度のご回答、本当にありがとうございます。

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

よろしくお願いします。

補足日時:2006/07/09 00:03
    • good
    • 1

#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 ブロック変数が設定されていません。

となります。

どのように変更すればよろしいでしょうか?

補足日時:2006/07/08 10:29
    • good
    • 1

プロテクトの一環として考えてよろしいのでしょうか?


もし、そうでしたら、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.
    • good
    • 1

マクロでもいいなら下記のサイトが参考になります。


http://www.excel7.com/trouble19.htm
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

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

お礼日時:2006/07/08 10:34

セルのコピー・貼り付けは不可だけど、入力はOKにしたいということですか?


それなら入力を許すセルを「書式」、「セル」、「保護」でロックのチェックを外し、「ツール」でシート保護をかけてください。
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。

しかし、これでは無理のようです(すみません)。

お礼日時:2006/07/08 10:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A