2017-01-23 65 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