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