自动排序到最后一列

时间:2013-06-05 17:07:12

标签: excel excel-vba vba

对于帖子的不满感到抱歉,我正在尝试完成一个项目(似乎还有一件事)

我想从自动排序到最后一列从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

1 个答案:

答案 0 :(得分: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