2017-04-05 34 views
1

很新手的程序員,所以希望我的問題不要太愚蠢。我正在嘗試設置一個可以調用的通用排序子例程,但排序子例程查看該範圍的變量。這樣我就可以在其他地方設置範圍(比如我稱之爲子例程的按鈕),而不是將其硬編碼到排序例程中。VBA:在Sorting子程序中引用存儲爲變量的範圍

到目前爲止,我的思路是這樣的:

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。如何在調用子程序時正確調用該變量?

+0

'Private'或'公共列Range'然後用'column' http://www.vb6.us/tutorials/vb6-variable-scope –

回答

0

將「Column」一詞用作變量可能不是一個好主意。這應該是一個保存的詞。改爲使用Column1,然後將你的sub變成一個函數,並將range參數傳遞給它。

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 
+0

你也可以通過它的工作表來概括功能針對不同的應用。喜歡 –