Private Sub Workbook_Open()
With Me.Worksheets("A")
.EnableAutoFilter = True
.Protect Password:="PSW", UserInterFaceOnly:=True
End With
With Me.Worksheets("B")
.EnableAutoFilter = True
.Protect Password:="PSW", UserInterFaceOnly:=True
End With
End Sub
Excel2000では、マクロを使わないと設定できません。
一例です。
'ThisWorkbookModuleにコピーペースト必要。
'-------------------------------------------------
Option Explicit
Private Sub Workbook_Open()
Dim ws As Worksheet
'セル右クリックメニューに"aFilter"追加
With Application.CommandBars("Cell") _
.Controls.Add(Type:=msoControlButton, _
Before:=1, _
Temporary:=True)
.Caption = "AutoFilter"
.OnAction = Me.CodeName & ".aFilter"
End With
'[EnableAutoFilter]プロパティと _
Protect引数[UserInterfaceOnly]を設定 _
各シートごとに必要
For Each ws In ThisWorkbook.Worksheets
With ws
'設定するシート名で条件分岐
If .Name = "A" Or .Name = "B" Then
.Unprotect
.EnableAutoFilter = True
.Protect UserInterfaceOnly:=True
End If
End With
Next
End Sub
'-------------------------------------------------
Private Sub aFilter()
On Error Resume Next
Selection.AutoFilter
On Error GoTo 0
End Sub
'-------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
'Bookを閉じる時、追加したControlを削除
Application.CommandBars("Cell").Controls("AutoFilter").Delete
On Error GoTo 0
End Sub
'-------------------------------------------------
BookOpenと同時に目的のシートをオートフィルタを許可しつつ保護します。
それと同時に、右クリックメニューにオリジナルの[AutoFilter]メニューを追加します。
(ワークシートメニューバーの既定の[オートフィルタ]メニューはシート保護でグレーアウトになり使えません)
質問者
お礼
ありがとうございます。
VBA初心者の私には難し過ぎますね。
過去のQ&Aを調べていたら簡単なVBAがあり実行できました。しかし1つのシートしか適用されません。
これを2つのシートに適用するにはどうすれば良いのですか?
Private Sub Workbook_Open()
With Me.Worksheets("Sheet1") 'Sheet1 に設定する場合
.EnableAutoFilter = True
.Protect Password:="PSW", UserInterFaceOnly:=True
'パスワードを、「PSW」にしました。
End With
End Sub
お礼
早速の情報をありがとうございました。 これで仕事がはかどります。