![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつも大変お世話になっております。
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(エクセル)
-
VBAでブック保護非保護を判定するには?
Excel(エクセル)
-
-
4
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
5
VBAでシート挿入を禁止したい。
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
8
【Excel VBA】シートコピー時、マクロコードはコピーしたくない
Access(アクセス)
-
9
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
10
EXCELでワークシートを開いたらマクロを自動実行したい
Excel(エクセル)
-
11
エクセル ファイルを削除できないようにしたいです
Excel(エクセル)
-
12
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
13
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
14
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
15
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
18
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
19
Excelで書式の変更を禁止しデータ入力だけ許可したい
Excel(エクセル)
-
20
エクセルVBAの記述方法について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
Excelの警告について
-
VBAでブックを非表示で開いて処...
-
エクセルの関数 ENTERを押...
-
VBAでブック保護非保護を判定す...
-
エクセルで参照しているデータ...
-
エクセルファイルを開かずにpdf...
-
エクセル 複数のブックを一度...
-
エクセルで50行ごとに区切った...
-
Excelでブックの共有を掛けると...
-
【マクロ】【VBA】別ブックへの...
-
複数ファイルから特定シートの...
-
Excelで複数ブックの同一セルに...
-
エクセルで「ディスクがいっぱ...
-
エクセルでウィンドウの枠固定...
-
別ブックから入力規則でリスト...
-
Excel起動時に特定のワークシー...
-
同じフォルダへのハイパーリン...
-
エクセル2016です。「ブッ...
-
【マクロ】for nest について ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
【マクロ】【VBA】別ブックへの...
-
Excelで複数ブックの同一セルに...
-
エクセルにおける,「ブック」...
-
エクセルで50行ごとに区切った...
-
エクセルファイルを開かずにpdf...
-
Excel(2010)のフィルターが保...
-
エクセルで「ディスクがいっぱ...
-
エクセル2016です。「ブッ...
-
エクセルでウィンドウの枠固定...
-
外部ブック参照が#REF!になって...
-
エクセルで別ブックをバックグ...
-
エクセルシートの一部を送りたい
-
ブックのピボットを別ブックに...
-
複数ファイルから特定シートの...
おすすめ情報