VBA超初心者です。
たくさんのシートのあるエクセルで、
シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。
(現在エクセル2000を使用してます)
ネットで調べてVBAを設定してみました。
しかし下記のようにするとコンパイルエラーになってしまうのですが、
正しい方法を教えていただけると助かります。
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Cell").Reset
End Sub
Private Sub Workbook_Open()
With Application.CommandBars("Cell").Controls.Add( _
Type:=msoControlButton, Before:=1, Temporary:=True)
.Caption = "AutoFilter"
.OnAction = "ThisWorkbook.filter"
End With
With Worksheets.Select
.Unprotect
.EnableAutoFilter = True
.Protect UserInterfaceOnly:=True
End With
End Sub
Private Sub filter()
On Error Resume Next
Selection.AutoFilter
End Sub
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
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() '名前
ありがとうございます。
ネットで調べたものをいくつか繋げてみたので、
実際の文言の意味はあまり把握してませんでした。
全てのシートに一発で使えるようにしたかったので、
名前(シート名でよろしいのでしょうか?)部分を入力しない方法を探してました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセル365のVBAで困っています。どう修正したらよいか添削をお願いします 2 2023/05/03 17:35
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) ExcelVBA ドロップボックスで月を選択するとそれ以降のデータが残るようにしたい。 3 2022/12/16 14:53
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
エクセルの2つのシートを並び...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
EXCELの「シートの見出し」のフ...
-
エクセルのシート連番の振り直し
-
エクセル シート同士の引き算
-
ワークシートそのものの色を変...
-
InputBoxに入力した言葉をシー...
-
エクセルのシー名を二段表示に...
-
エクセル、別のシートの表をポ...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
DATE関数 4月31日などのあ...
-
【ExcelVBA】マクロの入ったシ...
-
Accessのテーブルを既存のExcel...
-
accessへエクセルの複数のシー...
-
エクセルの非表示シートを一括表示
-
Numbersについてお伺いです。 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報