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)