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
'-----------------------------------------------------------------
できました!
本当、ありがとうございました。
せっかく教えていただいたソース、自分なりに分析して自分の知識にしていく所存です。
300ポイントほど差し上げたいところですが、システム上不可能なのが残念です。
心の中では20ポイントどころではない感謝をしていますので……。
No.5
- 回答日時:
こんぱんは。
>FindControl(, 19).Enabled = Cmd_bln 'Copy
>↑上記ステップにて
>実行時エラー'91':
>オブジェクト変数または With ブロック変数が設定されていません。
少し、時間をください。一応、Excelのバージョンを教えておいてください。
それは、たぶん、ここの部分です。
For Each cmd In Array(1, 20, 24, 25)
Indexの番号にしたのが間違いでした。それは、Excel全バージョンで共通ではないようです。
この回答への補足
再度のご回答、本当にありがとうございます。
試したのはExcel2002(自宅PC)です。
しかし、実際に実行したいのは会社の環境で、ほとんどが2003ですが2002も少数ながら混在しています。
よろしくお願いします。
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
'-----------------------------------------------------------------
この回答への補足
コメントが遅くなって大変申し訳ありませんでした。
ご回答いただいた通りに記述してみましたが、
オープン時・クローズ時に
.FindControl(, 19).Enabled = Cmd_bln 'Copy
↑上記ステップにて
実行時エラー'91':
オブジェクト変数または With ブロック変数が設定されていません。
となります。
どのように変更すればよろしいでしょうか?
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.
No.2
- 回答日時:
ご回答、ありがとうございます。
マクロで対応するつもりでいました。
他の機能についても大変参考になりました。
が、目的については正常に機能せず……。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
VBAで、貼り付け禁止命令を実現したい(エクセル)
Visual Basic(VBA)
-
EXCELでのコピー&ペーストを含む複製処理の禁止方法について
Excel(エクセル)
-
Excelファイルをコピー不可にする設定
Excel(エクセル)
-
-
4
エクセルファイルを値でのみしか貼り付けできないようにする
Excel(エクセル)
-
5
Excel 条件によって入力禁止にする
Excel(エクセル)
-
6
エクセル/シート保護でドラッグ&ドロップを不可としたいのです。
Excel(エクセル)
-
7
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
8
エクセルで、オブジェクトの選択を禁止する方法。
Excel(エクセル)
-
9
シートを保護しても入力規則を使えるようにしたい
Excel(エクセル)
-
10
Excelで保護のかかったシートのコピー
Excel(エクセル)
-
11
エクセル 入力規則 貼付しても規則が変わらないようにするには?
Excel(エクセル)
-
12
貼り付けをマクロで禁止させたい。
Excel(エクセル)
-
13
EXCELの特定セルを編集不可・コピー可能・数式非表示の状態にすることは可能か?
Excel(エクセル)
-
14
すでにコピーした情報を貼り付けたらイベントを発生
PowerPoint(パワーポイント)
-
15
右クリックから切り取り、コピー、貼り付けができなくなりました
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのアポストロフィを一...
-
エクセル:マクロ「Application...
-
エクセルで隣接していない複数...
-
エクセルで勝手に「折り返して...
-
メールソフト「サンダーバード...
-
Excel 行の連続データを列に参...
-
エクセル 別シートへのコピー...
-
Excelでコピーした行の挿入を繰...
-
【エクセル】行の高さを規則的...
-
EXCEL シート保護するとマクロ...
-
フォームのテキストボックスの...
-
エクセル コピーしたデータを1...
-
エクセルで値だけコピーして背...
-
エクセルオートフィルで書式を...
-
エクセルで、選択範囲の数値全...
-
「選択範囲を解除してアクティ...
-
Excelに、ダブルクォーテーショ...
-
EXCEL、セルのコピー・貼り付け...
-
EXCELのオートフィルの設定を変...
-
EXCELで「行と列を入れ替える」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル:マクロ「Application...
-
エクセルのアポストロフィを一...
-
エクセルで隣接していない複数...
-
エクセルの2ページ目の作り方
-
Excel 行の連続データを列に参...
-
エクセルで勝手に「折り返して...
-
メールソフト「サンダーバード...
-
Excelでコピーした行の挿入を繰...
-
EXCELのオートフィルの設定を変...
-
Excel)軽いデーターのはずなの...
-
Excelに、ダブルクォーテーショ...
-
EXCELシートをPowerPointにきれ...
-
「選択範囲を解除してアクティ...
-
エクセルオートフィルで書式を...
-
エクセルで値だけコピーして背...
-
エクセルで、選択範囲の数値全...
-
エクセルでの行数・列数を指定...
-
エクセル 別シートへのコピー...
-
EXELで複数のとびとびのセルを...
-
エクセルで「コピーしたセルの...
おすすめ情報