VBA:在排序子

时间:2017-04-05 15:38:35

标签: excel vba excel-vba

非常新手程序员所以希望我的问题不是太愚蠢。我试图设置一个我可以调用的公共排序子例程,但是排序子例程查看范围的变量。这样我可以在其他地方设置范围(例如我调用子程序的按钮),而不是将其硬编码到排序例程中。

到目前为止,我的思路是这样的:

Dim Column As Range
Sub SortCodeDsc()
        ActiveWorkbook.Worksheets("Benchmark Data").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Benchmark Data").Sort.SortFields.Add Key:=Range("A4:A100").Value, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Benchmark Data").Sort
    .SetRange Range("A4:HH100")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
End Sub

Private Sub Year_Click()
    Set Column = ActiveSheet.Range("A4:A100")
    Call SortCodeDsc
End Sub

因此Range("A4:A100")位于子SortCodeDsc中我想改为将我设置的变量列调用A4A100的范围。在调用子例程时如何正确调用该变量?

1 个答案:

答案 0 :(得分:0)

使用" Column"这个词可能不是一个好主意。作为变量。这应该是一个保存的词。使用Column1代替并将您的sub转换为函数,并将范围参数传递给它。

Function SortCodeDsc(columnRange As Range)
        ActiveWorkbook.Worksheets("Benchmark Data").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Benchmark Data").Sort.SortFields.Add Key:=columnRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Benchmark Data").Sort
    .SetRange Range("A4:HH100")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
End Function

Private Sub Year_Click()
Dim column1 As Range

Set column1 = ActiveWorkbook.Worksheets("Benchmark Data").Range("A1:A100")
    Run SortCodeDsc(column1)
End Sub