如何在Excel VBA中的子例程之间传递范围variables

我试图将一个范围传递给一个子程序,但是它抛出了一个“方法范围”的对象'_Global'失败“错误。

主要我声明和定义我想要使用的范围variables:

Sub maintest() Dim ScheduledSort As Range Set ScheduledSort = Range("F4:F321") Call test(ScheduledSort) End Sub 

然后在子程序testing中,我希望它使用我从上面的例程中通过它的范围进行sorting:

 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")但我无法解决为什么以及如何解决它。
这是什么,我做错了的范围,如何解决这个问题,我可以通过它任何范围进行sorting?
如果您对我正在尝试做的事情有更好的build议,请随时添加! 🙂

较短的版本将如下所示:

 Sub test(rng As Range) ' Sort in descending order Worksheets(rng.Parent.Name).AutoFilter.Sort.SortFields.Add _ Key:=rng, SortOn:=xlSortOnValues, Order:=xlDescending, _ DataOption:=xlSortTextAsNumbers With Worksheets(rng.Parent.Name).AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

跑步:

 Call test(Worksheets("YOUR WORKSHEET NAME").Range("YOUR RANGE")). 

如果您将一个Range对象传递给子,则传递一个已经与某个工作表关联的对象。 该子select一个可能不同的工作表,然后处理传递的范围有问题。

如果要将特定的单元块传递给需要更改工作表的子部分,请改为传递一个stringvariables。

UNTESTED

 Sub maintest() Dim ScheduledSort As String ScheduledSort = "F4:F321" Call test(ScheduledSort) End Sub Sub test(RangeForSort As String) Sheets("SheetTest").Select 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