我試圖將範圍傳遞給子例程,但它拋出了對象'_Global'的「方法範圍'失敗」錯誤。如何在Excel VBA中的子例程之間傳遞範圍變量
在主我聲明和定義的範圍內可變我想使用:
Sub maintest()
Dim ScheduledSort As Range
Set ScheduledSort = Range("F4:F321")
Call test(ScheduledSort)
End Sub
然後在子程序測試我希望它使用範圍我通過它從上面的例程進行排序:
Sub test(RangeForSort)
Sheets("SheetTest").Select
' Sort in descending order
ActiveWorkbook.Worksheets("SheetTest").AutoFilter.Sort.SortFields.Add _
Key:=Range("RangeForSort"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("SheetTest").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
我認爲它在Key:=Range("RangeForSort")
出錯了,但我找不出爲什麼以及如何解決它。
它是什麼我做錯了的範圍和我如何解決它,使我可以通過它任何範圍進行排序?
如果您對我正在嘗試做的事有更好的建議,請隨時添加! :-)
'鍵:= RangeForSort'或...'鍵: = Range(RangeForSort.address)'...'RangeForSort'是一個範圍對象,而不是一個字符串。 Jeeped指出你也可能有不正確的工作表,但第二個版本應該處理這個問題。 –
你不需要'maintest()'子。你可以直接將範圍傳遞給你的'test()'子。 –
'maintest()'是從一個更大的塊調用其他例程的代碼片段...在子測試中'test'sub被刪除,我排序從上面的sub傳遞給它的一些標準,然後我篩選特定細胞。我需要根據不同的標準進行過濾,然後在不同的列上進行排序。有一個通用的子程序來完成過濾和排序似乎是最好的方法。 –