Excel VBA对一个范围进行sorting

我写了一个macros,它打开一个包含新数据的CSV文件,复制内容(减去标题行),并将其粘贴到主工作簿中。 现在我需要它也按照列A中给出的样本号对整个数据集(主表中的所有数据)进行sorting。我尝试了两种不同的方法:

Set rData = ThisWorkbook.Sheets("Data").Range("A1") Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) rData.Sort Key1:=Range("A:A"), Order1:=xlAscending, Header:=xlYes 'Debug points here 

此方法返回运行时错误1004:“sorting引用无效”。

 Set rData = ThisWorkbook.Sheets("Data").Range("A1") Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) ThisWorkbook.Sheets("Data").Sort.SortFields.Clear 'Debug points here ThisWorkbook.Sheets("Data").Sort.SortFields.Add Key:=Range( _ "A:A"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ThisWorkbook.Sheets("Data").Sort .SetRange Range(rData) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 

此方法返回运行时错误9:“下标超出范围”。

有类似的问题,可以帮助你的答案。
“1004”:“sorting参考无效”。
Excel VBA运行时错误1004

对于我所知道的错误在这里: Key1:=Range("A:A")可能会将其更改为Key1:=Range("A1")并确保将工作簿或工作表引用添加到范围好。

我相信它在这里:

 Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) 

尝试这个:

 Set rData = Range(cells(1,1), cells(4,rData.End(xlDown).Offset(0, 4))) 

*注意,我经常把.cells()的行/列顺序混淆,所以如果你的范围不正确,你必须交换它们。

在任一情况下,

 Set rData = ThisWorkbook.Sheets("Data").Range("A1") Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) 

是多余的,至多你需要:

 Set rData = Range("a1", rData.End(xlDown).Offset(0, 4)) 

根据评论更新:

我认为问题在于你如何指定你的范围进行sorting。 文档说,你可以sorting任何范围,包括整个工作表。 也可以sorting整个工作表,因为这是唯一的数据,对吗?

 set rdata = thisworkbook.sheets("Data") rdata.sort (Key1:=rdata.range("A:A"), Order1:=xlAscending, Header:=xlYes)