【发布时间】:2015-06-03 22:19:51
【问题描述】:
我编写了一个宏,它打开一个包含新数据的 CSV 文件,复制内容(减去标题行),然后将其粘贴到主工作簿中。现在我还需要它按 A 列中给出的样本编号对整个数据集(主表中的所有数据)进行排序。我尝试了 2 种不同的方法:
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:“下标超出范围。”
【问题讨论】:
-
哪一行报错了?
-
我在代码中添加了 cmets 以显示哪些行会引发错误。另外,我的方法 2 的错误代码有误,因此已更新。
-
尝试
Set rData = Sheets("Data").Range("A1:D" & Sheets("Data").UsedRange.Rows.Count)摆脱Set rData = Range(rData, rData.End(xlDown).Offset(0, 4)) -
这将在短期内起作用,但我希望此宏适用于列数未知的数据。
.Offset(0, 4)将替换为.Offset(0, iCol),其中iCol是在此之前的计数循环定义的整数。