请允许我先说一下我没有接受过 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
请尝试下一个代码。它对必要的列进行排序,按“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
请在测试后发送一些反馈。