我有一个相对较长的子程序,根据其来源,将数据添加到一堆列中的另一个工作表中。这部分代码完美无缺,但我希望将表中的所有行排序到最后添加的行。我添加到最后的排序代码如果我硬编码要包含在范围内的单元格,但每次运行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错误。 谢谢你的帮助。
答案 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
,并且在开头有一个数字。