【问题标题】:Excel VBA sort a rangeExcel VBA对范围进行排序
【发布时间】: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 是在此之前的计数循环定义的整数。

标签: vba excel


【解决方案1】:

我相信它在这里:

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)

【讨论】:

  • 我看不出我的代码是多余的。该宏打开了 2 个工作簿,因此我需要我的代码指向正确的工作簿。另外,我看不出你的最后一行是如何工作的。你怎么能 .End(xlDown).Offset(0, 4)) 来自尚未设置的变量?
  • 是的,好的,有效积分。我正在查看您的第二个 Set rData = 声明的第一个范围,并错过了在那里看到 rData 的第二次使用。我会再试一次......
【解决方案2】:

关于 SO 有类似的问题,答案可能对您有所帮助。
'1004': “The sort reference is not valid.”
Excel VBA Run-Time Error 1004

据我了解,错误出在此处:Key1:=Range("A:A") 可能将其更改为 Key1:=Range("A1") 并确保添加工作簿或/和工作表引用到该范围。

【讨论】:

  • 将工作簿和工作表引用添加到该范围就可以了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多