2

我成功地使用了下面的代码,一旦我用数据填充工作表,就根据列按升序对数据进行排序B,第一行是记录标题;B列是REPTNO列。

对于样本数据,我有 B1 包含REPTNO和 B2-B17 包含SR0238-SR0253. 一切都很好,但是当我清除 B2-B17 并提交给用户进行测试时,发生了一些奇怪的事情。

我的用户在第 2 行输入了一条值为JF0007for的记录REPTNO。当我的以下代码处理时,我的第一行和第二行正在翻转(J 在 R 之前),导致我的“标题”列位于第二行而不是保留在第一行。

我需要更改什么才能仅对第二行进行排序,不包括第一行?当我输出到 .txt 文件时,我的第 1 行需要保留为第 1 行。

在这种情况下,值为rowCnt2(标题行 + 输入的 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.

4

1 回答 1

3

当没有任何东西要排序时,看起来排序有点小故障,因为很明显,当只有一个单元格时,它没有任何东西要排序,还不如跳过。

所以我只建议先检查是否有不止一行填写,如果没有则跳过排序。

' 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
于 2013-07-02T19:40:19.440 回答