VBA自动filter可变范围
我试图使我的自动filter范围基于variables的值,但它不工作。 有没有人有什么build议?
Dim y, z As Integer y = 5 z = 3 rows(z).Select Selection.AutoFilter ActiveWorkbook.Worksheets("Active Worksheet").AutoFilter.Sort.SortFields.Clear **ActiveWorkbook.Worksheets("Active Worksheet").AutoFilter.Sort.SortFields.Add _ Key:=Range(Cells(z, y)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal** With ActiveWorkbook.Worksheets("Active Worksheet").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
你的主要问题是你使用Range(Cells())
,这不是VBA喜欢的东西。 如果使用范围,则要执行Range("A1")
或Cells(1,1)
。 如果你需要使用Range
,那么你只需要Range(Cells(1,1),Cells(1,1))
。
因此,在您的错误行中,将密钥更改为Key:=Cells(z,y)
或Range(Cells(z,y),Cells(z,y))
。
不过,我也强烈build议避免使用。select/ .Active
:
Sub whatever() Dim y As Integer, z As Integer Dim mainWB As Workbook Dim activeWS As Worksheet Set mainWB = ActiveWorkbook Set activeWS = mainWB.Worksheets("Active Worksheet") y = 5 z = 3 With activeWS .Rows(z).AutoFilter .AutoFilter.Sort.SortFields.Clear .AutoFilter.Sort.SortFields.Add Key:=.Cells(z, y), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With .AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End With End Sub