
いつも大変お世話になっております。
Excel2003を使用しております。
今回VBAでやりたいことは、
特定シートの名前編集・削除を禁止したいのです。
シート名 「データ」
シート名 「一覧」
この二つを名前編集・削除禁止にしたいと思っております。
保護する方法も考えたのですが、
現在様々なプログラムでシートを利用しており、
保護をかけると色んなフォーム上で保護解除をしないといけません。
データの参照・編集が出来ないと困るのです。
保護をかける
以外で何か、方法はありますでしょうか?
以上、
回答よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
こんにちは。
何年ぶりかで、このようなマクロを書いてみました。
普通は、ブックの保護のシート構成の保護だけで、良いはすですが、以下のようなマクロが可能かと思います。ただし、上位バージョン(2010)では、稼働しませんでした。また、2003では、現在、完全には試しておりません。たぶん、ご質問者さんでしたら、コードに間違いがあっても、修正できますでしょうから、今はヒントということだけにしてください。
また、本来は、FindControlsのID、847, 889が該当するのですが、バージョン2003ですと、Control配列になってしまいますので、その中を選択するという方法は、ちょっと手間が多すぎます。
'//ThisWorkbookに登録
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "データ" Or Sh.Name = "一覧" Then
With Application.CommandBars("Ply")
.Controls("削除&(D)").Enabled = False '削除
.Controls("名前の変更&(R)").Enabled = False '名前の変更
End With
End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'戻し
If Sh.Name = "データ" Or Sh.Name = "一覧" Then
With Application.CommandBars("Ply")
.Controls("削除&(D)").Enabled = True
.Controls("名前の変更&(R)").Enabled = True
End With
End If
End Sub
'ブックを開いたり閉じたりする場合
Private Sub Workbook_Activate()
If ActiveSheet.Name = "データ" Or ActiveSheet.Name = "一覧" Then
With Application.CommandBars("Ply")
.Controls("削除&(D)").Enabled = False '削除
.Controls("名前の変更&(R)").Enabled = False '名前の変更
End With
End If
End Sub
Private Sub Workbook_Deactivate()
'戻し
If ActiveSheet.Name = "データ" Or ActiveSheet.Name = "一覧" Then
With Application.CommandBars("Ply")
.Controls("削除&(D)").Enabled = True '削除
.Controls("名前の変更&(R)").Enabled = True '名前の変更
End With
End If
End Sub
'//
この回答への補足
回答ありがとうございました!
遅くなりましたが、試してみました。
…思い通りの結果です!感激しました!!
助かりました^^ありがとうございました!
補足にてお礼することになり、申し訳ありません。
ありがとうございました!
回答ありがとうございます!
マウスで右クリックした時に
名前の変更・削除 ボタンが無くなるVBAでしょうか?
"Ply" というのをはじめてみました^^
まだまだ、勉強していかなきゃだめですね!
とて参考になりました!
ありがとうございました^^
早速試してみます!
No.5
- 回答日時:
>ブックの保護(シート構成保護?)をしてしまうと新規シートは作成できないのですよね?
はい。
>特定のシートのみ、名前の変更・シート削除ができないようにするには、この方法ではダメ…なのでしょうか?
特定シートのみ、とはならず、全シートですね。だからこその「ブックの」保護なのでしょうね。
ちょうど No.3 さんが Worksheet.Protect メソッドを紹介されていますが、それとは別に VBA には、Workbook.Protect メソッドというものも用意されています。
workbooks("保護.xlsm").Protect password:="abcd" 'ブックを保護
workbooks("保護.xlsm").unProtect password:="abcd" 'ブックの保護を解除
つまり、VBA でデータ処理するたびに手動で予め保護を解除しておくのは煩わしいということであれば、保護の解除と再設定についても、ついでにマクロで Excel に作業させてしまえばよいでしょう。
こうなると、マクロもパスワードで保護したい、となるかもしれません。しかしマクロのコードは、必ずしも同じブックに保存しておく必要はないのです。
回答ありがとうございます。
どう対応するのがいいか、色々考えましたが…
その場合ですと、たくさんのフォームプログラム上に
保護解除プログラムを入れないといけません。
そうなってしまうと、20以上?のフォームプログラムに
保護解除、終了時に保護 を入れなければならず
少し面倒だと思っております…
No.4
- 回答日時:
質問文を読んでいて、ちょっと腑に落ちないのは、質問者さんは「シートの保護」と「ブックの保護」を区別されていますか?という点です。
「シートの保護」をすると、ロックのかかっているセルの編集・削除ができないようにできますが、シート名の編集・削除はできます。逆に「ブックの保護」をすると、シート名の編集・削除ができないようにできますが、セルは編集・削除ができます。どちらの機能も、パスワードを設定することも可能です。
「データの参照・編集が出来ないと困る」というのは、セルの参照や編集ができさえすれば保護が存在していても問題ないという意味であれば、ブックを保護すれば解決のような感じもしたのですが、いかがでしょうか。ま、保護を解除させないためにパスワードを設定したいが、その管理が煩わしいと言われたら、採用できない案かもしれませんが。
回答ありがとうございます^^
確かに、「シート保護」と「ブック保護」の違いが
良く分かっておりませんでした。
詳しい説明ありがとうございます。
ブックの保護(シート構成保護?)をしてしまうと
新規シートは作成できないのですよね?
色々情報不足で申し訳ないのですが、
新規シートを使うときに作成し、編集したり…という
こともVBAでしています。(保護したいシート以外のシート)
特定のシートのみ、名前の変更・シート削除ができないように
するには、この方法ではダメ…なのでしょうか?
回答ありがとうございました!
No.3
- 回答日時:
No1です。
では、もう一案
フォーム上のコードを変更せずに保護の解除と保護を行う案として
目的のシートには保護をかけておいて
フォーム上に、ユーザーフォームを表示させるボタンがあると思いますので
フォームの表示 .show の前に
Unprotect
.Show の後に
Protect
Sheets(保護がかかっているシート).UnProtect Password:="pass"
Userform1.Show
Sheets(保護がかかっているシート).Protect Password:="pass"
といった感じではどうでしょうか。
必要なコードはマクロの記録でも出来ると思います。
この回答への補足
フォームは20種類くらいあるので、大変な作業になるかと思われます。
また、workbook_Open に
Application.ScreenUpdating = False
Worksheets("データ").EnableAutoFilter = True 'データのシート フィルター可能に
Worksheets("データ").Protect Password:="pass", userinterfaceonly:=True, AllowFormattingCells:=True
Application.ScreenUpdating = True
上記のような感じで、シートを3つ
保護かけています。
しかし、現状ではシート削除できてしまうので
どうにかしたいと思いました。
この方法だと、VBAで
データの編集・削除・追加ができるため
あまり変えたくなく思っております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
特定のシートの削除を禁止したい(ブックの保護でなく)
Excel(エクセル)
-
EXCELでシート名を変更できなくしたい。(VBAです)
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
エクセル ファイルを削除できないようにしたいです
Excel(エクセル)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
別のユーザーフォームのコマンドボタンを押す
Visual Basic(VBA)
-
7
シート名を変更すると起動するマクロ
Excel(エクセル)
-
8
コマンドボタンやイメージにマウスをのせるとボタン名を表示したい
Excel(エクセル)
-
9
EXCELで複数のシートを一度に「シートの保護」することはできますか?
Excel(エクセル)
-
10
EXCEL VBA 印刷プレビューダイアログのボタン操作を判定したい
Visual Basic(VBA)
-
11
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
12
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
13
VBAを何回も作り直して、容量が増えた
Excel(エクセル)
-
14
Excelの特定のシートのみ削除・移動・名前変更等を許可しないようにするには?
Visual Basic(VBA)
-
15
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
マクロ実行後に別シートの残像が残り、オブジェクトが見えなくなる
Visual Basic(VBA)
-
18
エクセルの下部のシートタブの上で右クリックできなくなった
Excel(エクセル)
-
19
エクセルVBA 複数行にまたがっている選択を判定するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】アクティブセルの時...
-
VBAでブックを非表示で開いて処...
-
Excelの新しい空白のブックを開...
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
Excelで複数ブックの同一セルに...
-
Excelファイルをダブルクリック...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
エクセルでウィンドウの枠固定...
-
WorkBooksをオープンさせずにシ...
-
別ブックから入力規則でリスト...
-
エクセルで参照しているデータ...
-
Excelで拡張子の後に数字が……何...
-
VBAでブック保護非保護を判定す...
-
Excelでブックの共有を掛けると...
-
Excelの警告について
-
エクセルを開くと最大化などの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
Excelの警告について
-
Excelファイルをダブルクリック...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
Excel(2010)のフィルターが保...
-
Excelで複数ブックの同一セルに...
-
エクセルファイルを開かずにpdf...
-
エクセルにおける,「ブック」...
-
同じフォルダへのハイパーリン...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
VBA バックグラウンドで別ブッ...
-
エクセルでウィンドウの枠固定...
-
ブックのピボットを別ブックに...
-
フォルダ内の複数ファイルから...
-
エクセルで50行ごとに区切った...
おすすめ情報