当我将排序添加到宏

时间:2016-06-09 12:07:32

标签: excel vba excel-vba macros

我有一个相对较长的子程序,根据其来源,将数据添加到一堆列中的另一个工作表中。这部分代码完美无缺,但我希望将表中的所有行排序到最后添加的行。我添加到最后的排序代码如果我硬编码要包含在范围内的单元格,但每次运行sub时我的范围都会增长,所以我试着让范围包括我为下一个空命名的变量row(1MaxRows)。

当我这样做时,我收到一条错误,上面写着“400”,过去我收到此错误是因为我引用了工作表或工作簿错误,但这次我没有更改任何工作表参考。我的代码中给出了这个错误的部分如下:

Columns("A:Q").Select
ActiveWorkbook.Worksheets("Raw Data").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Raw Data").Sort.SortFields.Add Key:=range("A2:A & lMaxRows" _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Raw Data").Sort.SortFields.Add Key:=range("B2:B & lMaxRows" _
    ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Raw Data").Sort
    .SetRange range("A1:Q & lMaxRows")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

我尝试过多种方式更改范围代码,但我总是遇到溢出错误或400错误。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您应该使用正确的工作表限定Range调用,并且您的地址中的引号也在错误的位置。例如:

Dim ws                    As Worksheet
Set ws = ActiveWorkbook.Worksheets("Raw Data")
With ws.Sort.SortFields
    .Clear
    .Add Key:=ws.Range("A2:A" & lMaxRows), SortOn:=xlSortOnValues, _
         Order:=xlAscending, DataOption:=xlSortNormal
    .Add Key:=ws.Range("B2:B" & lMaxRows), SortOn:=xlSortOnValues, _
         Order:=xlDescending, DataOption:=xlSortNormal
End With
With ws.Sort
    .SetRange ws.Range("A1:Q" & lMaxRows)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

我假设您已正确声明并为lMaxRows分配了一个值(请注意它是LMAXROWS而不是1MAXROWS,并且在开头有一个数字。