更灵活的排序

时间:2013-11-04 21:55:10

标签: excel excel-vba vba

我创建了一个宏来对客户名称列表进行排序,但是正如您在下面看到的那样,它会对现在从A2到A47的列表进行排序。我担心当列表的大小增加或收缩时,我的宏将无法正常工作。如何调整此值,以便我的排序宏可以在任何列A列中运行。谢谢。

Sub ByCustomerName()
'
' ByCustomerName Macro
' Sorts by Customer Name
'

'
    ActiveWorkbook.Worksheets("My Customers").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("My Customers").Sort.SortFields.Add Key:=Range( _
    "A2:A47"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal

    With ActiveWorkbook.Worksheets("My Customers").Sort
        .SetRange Range("A1:B47")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

2 个答案:

答案 0 :(得分:0)

您只需设置范围而不是硬编码\

更改.SetRange Range("A1:B47")


在代码的顶部尝试

Dim sortRange As Range
Dim lastRow As Long
Dim ws As Worksheet

Set ws = Sheet1

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Set sortRange = Range("A1:B" & lastRow)

然后.SetRange sortRange

答案 1 :(得分:0)

尝试Range("A1", Range("A1").End(xlDown))

这应该选择以A1开头的所有非空行。