我编写了一个宏,打开包含新数据的CSV文件,复制内容(减去标题行),然后将其粘贴到主工作簿中。现在我需要它来按照A列中的样本编号对整个数据集(主表中的所有数据)进行排序。我尝试了两种不同的方法:
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:"排序参考无效。"
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:"下标超出范围。"
答案 0 :(得分:1)
在SO上也有类似的问题,答案可能会对您有所帮助
'1004': “The sort reference is not valid.”
Excel VBA Run-Time Error 1004
据我所知,错误在于:Key1:=Range("A:A")
可能会将其更改为Key1:=Range("A1")
并确保添加工作簿或/和工作表引用。
答案 1 :(得分:0)
我相信它就在这里:
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))
根据评论更新:
我认为问题在于您如何指定要排序的范围。文档说您可以对任何范围进行排序,包括整个工作表。也可以对整张表进行排序,因为这是你得到的唯一数据,对吗?
set rdata = thisworkbook.sheets("Data")
rdata.sort (Key1:=rdata.range("A:A"), Order1:=xlAscending, Header:=xlYes)