SortFields函数和范围问题

时间:2014-05-25 16:12:31

标签: excel excel-vba vba

我在下面的代码中遇到的问题是,由于我定义的范围select,我无法在另一张工作表上成功运行此代码。我知道使用.select是不好的做法,现在我知道为什么,它会导致很多问题。我不确定如何修复此代码,以便它能够正常运行。

Sub Sorting(sorted As Range, keys As Range)


'Range("A1:A4").Select
sorted.Select
Sheets("IDBHour1").Sort.SortFields.Clear
Sheets("IDBHour1").Sort.SortFields.Add Key:=keys, SortOn:=xlSortOnValues, _
       Order:=xlAscending, DataOption:=xlSortTextAsNumbers
With Sheets("IDBHour1").Sort
    .SetRange sorted
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With


End Sub

1 个答案:

答案 0 :(得分:1)

您无需选择以进行排序。你如何在调用程序中传递范围?

我个人的偏好是将范围作为字符串传递,然后将它们放入sub中的范围内。该代码从任何地方运行。 IDBHour1表既不需要选择也不需要激活。

Sub Sorting(sortSheet As String, sorted As String, keys As String)

Dim ws As Worksheet
Dim sortRange As Range
Dim sortKeys As Range

Set ws = ThisWorkbook.Sheets(sortSheet)
Set sortRange = ws.Range(sorted)
Set sortKeys = ws.Range(keys)

ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=sortKeys, SortOn:=xlSortOnValues, _
       Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ws.Sort
        .SetRange sortRange
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Sub testSort()
    Call Sorting("IDBHour1", "A1:A10", "A1")
End Sub