Excel VBA 質問スレッド №351 (解決済)

シート保護状態で許可する操作の指定について

投稿者 : tanaka     投稿日時 : 2021/08/16(Mon) 09:52:40     OS : Windows 10     EXCEL : Excel 2016
初めまして。VBAの基本がわかっていない初心者です。
シートを保護した状態でオートフィルタやグループ化の操作を許可するVBAを探しています。

下記のサイトでコードを発見したのですが、一部編集したく記載方法を教えて頂けると幸いです。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_020_020.html

編集したい内容
①このコードが適用される範囲を特定のシートだけに制限したい
②行の挿入を可能にするなど、他に許可する操作を追加したい

-----------------------------------------------------------------------------------------
Option Explicit

Private Sub Workbook_Open()
    Dim objSh As Worksheet                      ' ワークシート(Work)
    ' 各ワークシートを巡回
    For Each objSh In ThisWorkbook.Worksheets
        With objSh
            ' グループ操作とオートフィルタ操作を可能としてシート保護
            .EnableOutlining = True
            .EnableAutoFilter = True
            .Protect UserInterfaceOnly:=True
        End With
    Next objSh
    ' 非保存になるため保存済み状態にする
    ThisWorkbook.Saved = True
End Sub
-----------------------------------------------------------------------------------------

スポンサーリンク
[返信 1] Re : シート保護状態で許可する操作の指定について
投稿者 : ハヤシライス     投稿日時 : 2021/08/16(Mon) 14:38:02
「For Each objSh In ThisWorkbook.Worksheets」のあとで、

If objSh.Name = "XXX" Then
のようにしてシート名を判定すればよいのでは?

また、許可したい操作については以下を参考にしてください。

https://excel-ubara.com/excelvba1/EXCELVBA368.html

[返信 2] Re : シート保護状態で許可する操作の指定について
投稿者 : tanaka     投稿日時 : 2021/08/16(Mon) 21:55:42
>ハヤシライスさん

返信ありがとうございます。所定の箇所に追加したところ、
「コンパイルエラー:Nextに対するForがありません。」の
メッセージが出て止まってしまいました。構文に過不足が
ありましたらご教示いただけますと幸いです。

また、許可したい操作についてもリンクありがとうございます。
下記のような構文をwith~の後に追加する形でしょうか。

Worksheets(1).Protect AllowFiltering:=True

[返信 3] Re : シート保護状態で許可する操作の指定について
投稿者 : ハヤシライス     投稿日時 : 2021/08/17(Tue) 09:02:57
エラーですが、追加したIFステートメントに対応する「End If」は記述していますか?

また、「Worksheets(1).Protect AllowFiltering:=True」ですが、元のコードには、Withブロックがあるので、その中で処理することになるかと思います
(すでに、「.Protect UserInterfaceOnly:=True」がありますね)。

[返信 4] Re : シート保護状態で許可する操作の指定について
投稿者 : tanaka     投稿日時 : 2021/08/17(Tue) 15:30:27
ハヤシライスさん返信ありがとうございます。

基礎知識がなく申し訳ありません。
End Ifを追記して動作するようになりました。

また、許可する操作はWithブロックの中の
「.Protect UserInterfaceOnly:=True」の後に
カンマ区切りで追記したら機能しました。

素人にも分かるように記載して頂き大変助かりました。
設定したかった内容が動作するようになりました。
ありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-08-10 09:29:19 )
タイトルとURLをコピーしました