• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA 保護シート&フィルタ実行 全シート)

エクセルVBAでシート保護後もフィルタを使用する方法

このQ&Aのポイント
  • エクセルVBAを使用して、シート保護後もフィルタを使用する方法を教えてください。
  • 現在エクセル2000を使用しています。
  • VBAで設定したコードがコンパイルエラーになってしまいます。正しい方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

変更前:  With Worksheets.Select   .Unprotect   .EnableAutoFilter = True   .Protect UserInterfaceOnly:=True  End With 変更後:  dim h as worksheet   :  For Each h In Worksheets  With h   .Protect UserInterfaceOnly:=True   .EnableAutoFilter = True  End With  Next

hhh0312hhh
質問者

お礼

ありがとうございます! 一発でできるようになりました! とても助かりました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

現在は、Excel2000では試していませんが、Excel2000でしたら、以下のようにしたほうがよいでしょうね。 Unprotect も Protect もそれぞれのシートに対して実行してください。 それと、Excelには、予約語そのものはほとんどないものの、filter というプロシージャ名はよろしくありません。せめて、FilterPro とかにしてください。間違いではありませんが、おかしな影響を及ぼすことがあります。 .OnAction = "ThisWorkbook.FilterPr" Private Sub Workbook_Open() Dim sh As Variant   With Application.CommandBars("Cell").Controls.Add( _            Type:=msoControlButton, Before:=1, Temporary:=True)     .Caption = "AutoFilter"     .OnAction = "ThisWorkbook.FilterPr" '名前   End With   For Each sh In ThisWorkbook.Worksheets     With sh     .Unprotect     .EnableAutoFilter = True     .Protect UserInterfaceOnly:=True     End With   Next sh End Sub Private Sub FilterPr() '名前

hhh0312hhh
質問者

お礼

ありがとうございます。 ネットで調べたものをいくつか繋げてみたので、 実際の文言の意味はあまり把握してませんでした。 全てのシートに一発で使えるようにしたかったので、 名前(シート名でよろしいのでしょうか?)部分を入力しない方法を探してました。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう