1

很抱歉发帖匆忙,我正在尝试完成一个项目(似乎总是还有一件事)

我正在尝试自动排序到从 F2 开始的最后一列我有以下但不工作

谢谢

Sub Sort()

Dim lastRow As Long
Dim lastCol As Long
Dim ws As Worksheet

Set ws = Sheets("sheet1")

lastRow = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
lastCol = Cells(2, ws.Columns.Count).End(xlToLeft).Column

With Sheets("Sheet1")
    ws.Range(ws.Range("F2"), ws.Cells(lastRow, lastCol)).Sort _
            Key1:=Range("lastCol"), Order1:=xlAscending, Header:=xlNo, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
End With
End Sub
4

1 回答 1

2

Key1 的值必须是一个范围。您正在尝试使用最后一列的数字,即使您删除引号也不起作用。

替换Key1:=Range("lastCol")Key1:=Cells(2, lastCol)

请注意,您可以使用我在上一个答案中包含的GetColumnLetter函数来获取 lastCol 列的字母。如果你有这个字母,你可以使用这个语法而不是 Cells 版本: Key1:=Range(myCol & 2)

为确保您知道要排序的内容,您可以添加一些调试代码。您还可以使用“立即”窗口和“监视”窗口来解决这个问题。

用这个替换你的整个子:

Sub Sort()

Dim lastRow As Long
Dim lastCol As Long
Dim ws As Worksheet
Dim rng As Range
Dim sortRng As Range

Set ws = Sheets("sheet1")

lastRow = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
lastCol = Cells(2, ws.Columns.Count).End(xlToLeft).Column

Set rng = ws.Range(ws.Range("F2"), ws.Cells(lastRow, lastCol))
Set sortRng = ws.Cells(lastRow, lastCol)
MsgBox "I will sort this range: " & rng.Address & _
           " using this column: " & sortRng

rng.Sort Key1:=sortRng, Order1:=xlAscending, Header:=xlNo, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal

End Sub
于 2013-06-05T17:23:45.333 回答