2017-01-23 64 views
0

我想編寫一個宏,該宏將創建自動篩選器(如果不存在),並刪除篩選器並刪除工作簿中某些選項卡中的特定範圍。刪除範圍並在多個選項卡中創建自動篩選器

我創建了這段代碼,但不知何故它不起作用 - 數據gis只從一個選項卡中刪除,而不是在If語句中未列出的所有選項。請幫忙!

Sub ClearTabs() 

Dim rng As Range 
Dim ws As Worksheet 
Set rng = Range("B9:AK100") 

For Each ws In ThisWorkbook.Sheets 
    If ws.Name <> "lastfile" And ws.Name <> "Sheet1" And ws.Name <> "Sheet2" Then 

     If Not ws.AutoFilterMode Then 
      ws.Range("B8:AK8").AutoFilter 
     End If 
    ws.AutoFilter.ShowAllData 
    rng.ClearContents 

    End If 

Next ws 

End Sub 
+0

多少張你有除了這些3張?此外,你將你的rng設置在ws循環之外,將其移動到內部並完全限定它。 –

回答

1

按照我的意見,那麼,需要設置範圍(Set rng = Range("B9:AK100"))的For Each ws In ThisWorkbook.Sheets循環中。

代碼

Sub ClearTabs() 

Dim rng As Range 
Dim ws As Worksheet 

For Each ws In ThisWorkbook.Sheets 
    With ws 
     Select Case .Name 
      Case "lastfile", "Sheet1", "Sheet2" 
       ' do nothing 
      Case Else 
       Set rng = .Range("B9:AK100") 

       If Not .AutoFilterMode Then 
        .Range("B8:AK8").AutoFilter 
       End If 
       .AutoFilter.ShowAllData 
       rng.ClearContents 
     End Select 
    End With 
Next ws 

End Sub 
+0

謝謝!你的方法有效。由於它與我試圖做的稍有不同 - 你能告訴我我的代碼中的錯誤在哪裏嗎? – dzmkr

+0

是的,只要將你的'設置RNG =範圍(「B9:AK100」)'在你的代碼的開頭,到行之後'對於每個WS在ThisWorkbook.Sheets',並使用'設置RNG = ws.Range( 「B9:AK100」),但是你不喜歡使用這個更清潔的版本嗎? –

+0

@dzmkr它解決了您的問題嗎? –

0

就可以避免調光和設置rng去這樣

Option Explicit 

Sub ClearTabs() 
    Dim ws As Worksheet 

    For Each ws In ThisWorkbook.Sheets 
     With ws 
      If .Name <> "lastfile" And .Name <> "Sheet1" And .Name <> "Sheet2" Then 
       If .AutoFilterMode Then 
        .AutoFilter.ShowAllData 
       Else 
        .Range("B8:AK8").AutoFilter 
       End If 
       .Range("B9:AK100").ClearContents 
      End If 
     End With 
    Next 
End Sub