2016-09-15 5 views
0

ワンクリックで1つまたは複数の列に適用されるフィルタを削除するボタンを作成しようとしています。 私は保護されたシートを持っているので、私はこの仕事のためにコードのシートを保護しないで保護する必要があります この方法は機能しましたが、保護シートが4枚あるので約2秒かかりました。 次に、If条件を使用するという考えが得られました。VBA内の単一のボタンを使用してExcelで複数の保護されたシートのフィルタをクリアする

Sub Resetauto() 
On Error GoTo Handler 

Application.DisplayAlerts = False 
Application.ScreenUpdating = False 

If ActiveSheet.Name = "Sheet3" Then 
Sheets("Sheet3").Unprotect Password:="pass" 
ActiveWorkbook.ActiveSheet.ListObjects(1).Sort.SortFields _ 
    .Clear 
ActiveSheet.ShowAllData 
Sheets("Sheet3").Protect _ 
Password:="pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 

ElseIf ActiveSheet.Name = "Sheet1" Then 
Sheets("Sheet1").Unprotect Password:="pass" 
ActiveWorkbook.ActiveSheet.ListObjects(1).Sort.SortFields _ 
    .Clear 
ActiveSheet.ShowAllData 
Sheets("Sheet1").Protect _ 
Password:="pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 

ElseIf ActiveSheet.Name = "Sheet4" Then 
Sheets("Sheet4").Unprotect Password:="pass" 
ActiveWorkbook.ActiveSheet.ListObjects(1).Sort.SortFields _ 
    .Clear 
ActiveSheet.ShowAllData 
Sheets("Sheet4").Protect _ 
Password:="Pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 

Else 
Sheets("Sheet5").Unprotect Password:="pass" 
ActiveWorkbook.ActiveSheet.ListObjects(1).Sort.SortFields _ 
    .Clear 
ActiveSheet.ShowAllData 
Sheets("Sheet5").Protect _ 
Password:="pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 
End If 

Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
Exit Sub 

Handler: 
Sheets("Sheet1").Protect _ 
Password:="pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 

Sheets("Sheet2").Protect _ 
Password:="pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 

Sheets("Sheet3").Protect _ 
Password:="pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 

Sheets("Sheet5").Protect _ 
Password:="pass", _ 
UserInterfaceOnly:=True, _ 
AllowFiltering:=True, _ 
AllowSorting:=True, _ 
AllowUsingPivotTables:=True 
Exit Sub 
End Sub 

このコードは何もしませんが、私のカーソルがフィルタ

私のコードで間違った何かがありますが削除されない2 sec..Itのために回転??

+0

エラーハンドラを削除すると、VBAはデバッグを行いますか? [コードレビュー](http://stackoverflow.com/questions/tagged/code-review)の人々もいくつかの提案を助けることができます。 – Kevin

答えて

0

OnErrorハンドラでエラーが無視されないと仮定して、私はElseIfを別のIf文で置き換えることを提案します。私はそれらを罠にすると思います。

関連する問題