如何在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