我成功地使用以下代码,一旦我用数据填充工作表,就会根据B
列按升序对数据进行排序,第一行是记录标题; B
列是REPTNO
列。
对于样本数据,我有包含REPTNO
的 B1 和包含 SR0238-SR0253
的 B2-B17 .一切都很好,但是当我清除B2-B17并提交给用户进行测试时,发生了一些奇怪的事情。
我的用户在第 2 行中输入了一条记录,其值为 JF0007
表示REPTNO
。当我下面的代码处理时,我的第一行和第二行正在翻转(J 在 R 之前(,导致我的"标题"列位于第二行而不是保留在第一行。
我需要更改什么才能仅对第二行进行排序,不包括第一行?当我输出到.txt文件时,我的第 1 行需要保留为第 1 行。
在此情况下,rowCnt
的值为 2(标题行 + 输入的 1 个数据行。
编辑2:
' Sort by REPTNO field
Dim xlSort As XlSortOrder
xlSort = xlAscending
If rowCnt > 2 Then
With Worksheets("Export")
.range("B2:B" & rowCnt).Sort Key1:=.range("B2"), Order1:=xlSort, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End If
它似乎仅在输入 1 条记录(第 2 行(时才交换第一行(标题行(。当我在第3行输入第二条数据记录REPTNO = JF0005
时,REPTNO
值保持为B1。但是,这段代码似乎并没有像我想象的那样运行。
我需要根据其REPTNO
值对所有行(第 2 行 - 无论有多少行(进行排序。可悲的是,我当前的代码仅对REPTNO
列中的数据进行排序,或B
.
当没有任何要排序的内容时,看起来排序会有点故障,因为显然当只有一个单元格时,它没有任何要排序的内容,也可以跳过。
所以我建议先检查是否填充了多行,如果没有,请跳过排序。
' Sort by REPTNO field
Dim xlSort As XlSortOrder
xlSort = xlAscending
With Worksheets("Export")
If .Range("B3") <> ""
.range("B2:B" & rowCnt).Sort Key1:=.range("B2"), Order1:=xlSort, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End if
End With