VBA 中的第二次排序失败

问题描述 投票:0回答:1

请允许我先说一下我没有接受过 VBA 培训。我所有的 VBA 知识都来自搜索像这样的论坛。对于任何明显的疏忽,我深表歉意。

我有一个大型的两部分宏。第一个宏本质上是将数据 vlookup 到“主”表中,并按 vlookup 列排序,因此任何 #N/As 都位于顶部。

此时的想法是能够手动更正之前 Vlookup 中的任何 #N/As。

然后我有第二个宏,它失败了,它应该重新排序数据(与以前相同的列,但是方向不同。以前它是下降的,所以 #N/As 将位于顶部,现在我希望它上升)

除了第二种之外一切正常。

我花了几个小时尝试在这些论坛上找到的不同方法,但没有成功。我已经运行的当前代码,但没有采取任何措施。

原始排序使用了非常基本的一行代码:

Worksheets("MASTER").Range("A1" & lastrow).Sort Key1:=Range("B1"), Order1:=xldescending, Header:=xlYes

有趣的是,我还没有设置最后一行。这本来是一个错字,但由于某种原因有效,而我实际设置的,lastrowm 却无效。 Lastrowm 的设置是这样的:

 Dim lastrowm As Long
 lastrowm = Worksheets("MASTER").UsedRange.Rows.Count
 If lastrowm = 1 Then
 If Application.WorksheetFunction.CountA(Worksheets("MASTER").UsedRange) = 0 Then lastrowm = 0
 End If

我也尝试了上面的代码,但没有使用 If 语句。

我不确定前面的代码是否以某种方式“破坏”了文件,因此新的排序将不起作用?我在第二次排序之前添加了“.SortFields.Clear”,但没有帮助。

这是我尝试进行第二种排序的最后一个代码:

 Dim lrow As Long
 Dim lcol As Long
 lrow = WS.Cells(Rows.Count, 1).End(xlUp).Row
 lcol = WS.Cells(1, Columns.Count).End(xlToLeft).Column

 WS.Cells.AutoFilter
 WS.AutoFilter.Sort.SortFields.Clear
 WS.AutoFilter.Sort.SortFields.Add Key:=Range("B1:B" & lrow), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
 With WS.AutoFilter.Sort
 .Header = xlYes
 .MatchCase = False
 .Orientation = xlTopToBottom
 .SortMethod = xlPinYin
 .Apply
 End With
 WS.AutoFilterMode = False
excel vba sorting
1个回答
0
投票

请尝试下一个代码。它对必要的列进行排序,按“B:B”列 (2) 排序:

Sub sortAWRange()
 With ActiveWorkbook
    With .Worksheets("MASTER")
        If .AutoFilterMode Then .AutoFilterMode = False
        With .Columns("A:W")
            .cells.Sort key1:=.Columns(2), Order1:=xlAscending, _
                        Orientation:=xlTopToBottom, header:=xlYes
        End With
    End With
 End With
End Sub

请在测试后发送一些反馈。

© www.soinside.com 2019 - 2024. All rights reserved.