Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA排序范围_Vba_Excel - Fatal编程技术网

Excel VBA排序范围

Excel VBA排序范围,vba,excel,Vba,Excel,我编写了一个宏,它打开一个包含新数据的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:=

我编写了一个宏,它打开一个包含新数据的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:“排序引用无效。”


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

我相信它在这里:

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)

在SO上也有类似的问题,答案可能会对您有所帮助。


据我所知,错误就在这里:
Key1:=Range(“A:A”)
可以将其更改为
Key1:=Range(“A1”)
,当然,也可以向该范围添加工作簿或/和工作表引用。

哪一行引发了错误?我在代码中添加了注释,以显示哪一行引发了错误。另外,我的方法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
是在此之前由计数循环定义的整数。我看不出我的代码是如何冗余的。宏打开了两个工作簿,因此我需要代码指向正确的工作簿。还有,我不知道你的最后一行怎么可能行得通。如何从尚未设置的变量中
.End(xlDown).Offset(0,4))
?是的,好的,有效点。我正在查看第二个
Set rData=
语句的第一个范围,但没有看到其中第二个
rData
用法。我将再次尝试一下……将工作簿和工作表引用添加到范围中成功了。谢谢
set rdata = thisworkbook.sheets("Data")
rdata.sort (Key1:=rdata.range("A:A"), Order1:=xlAscending, Header:=xlYes)