在VBA中自动filtersorting

我正在制作一个VBAmacros。 在某一点上,macros告诉excel改变当前的自动filter,使自动filter的sorting在Column A的列,它应该是升序。

但是,我现在所拥有的VBA代码声明范围是硬编码的,即Range(A1:A655) ,这是因为代码是用录制的macros写入的。 以下是我的VBA代码。 你能告诉我如何改变A1:A655而不是硬编码的方式,而不是一般的意思是“使范围是该列中的所有行,但有多less?

 ActiveWorkbook.Worksheets("A1").AutoFilter.Sort.SortFields.Add Key:=Range( "A1:A655"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= xlSortTextAsNumbers 

尽量避免依赖ActiveSheet属性 。 你应该知道你在哪个工作表上,并通过Worksheet .CodeName Worksheet .Name属性明确地引用它。

我相信你已经混合了一个工作表对象与一个Range对象 。 也就是说,除非实际上有一个名称为A1的工作表,这似乎不太可能。

Range.CurrentRegion属性是引用从A1辐射出的不间断的单元块的绝佳方法。 它继续下去,直到它遇到一个完全空白的行和完全空白的列。 单个或一小组中间空白单元不会中断其对该单元块的引用。

  With ActiveWorkbook With .Worksheets("Sheet1") If .AutoFilterMode Then .AutoFilterMode = False With .Cells(1, 1).CurrentRegion .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _ Orientation:=xlTopToBottom, Header:=xlYes With .Resize(.Rows.Count, 141) '<~~ A:EK .AutoFilter Field:=36, Criteria1:=1 'the CurrentRegion is sorted on column A and filtered 'on column AJ End With End With End With End With 

嵌套的With … End With语句可以定义你希望引用的单元块。

我相信你用传统的Range.Sort方法会更好。 它比.AutoFilter.Sort更直接。 随后的AutoFilter方法完成操作。