Vba 如何从子函数调用填充范围变量?
我正在尝试使此sub正常工作,但未分配operationalRange变量。尽管函数selectBodyRow(bodyName)工作正常Vba 如何从子函数调用填充范围变量?,vba,excel,Vba,Excel,我正在尝试使此sub正常工作,但未分配operationalRange变量。尽管函数selectBodyRow(bodyName)工作正常 Sub sortRows(bodyName As String, ByRef wksht As Worksheet) Dim operationalRange As Range Set operationalRange = selectBodyRow(bodyName) Debug.Print "Sorting Worksheet: " &
Sub sortRows(bodyName As String, ByRef wksht As Worksheet)
Dim operationalRange As Range
Set operationalRange = selectBodyRow(bodyName)
Debug.Print "Sorting Worksheet: " & wksht.Name
If Not operationalRange Is Nothing Then
operationalRange.Select
Debug.Print "Sorting " & operationalRange.Count & "Rows."
ActiveWorkbook.Worksheets(wksht.Name).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(wksht.Name).Sort.SortFields.Add Key:=operationalRange, _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets(wksht.Name).Sort.SortFields.Add Key:=operationalRange, _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(wksht.Name).Sort
.SetRange operationalRange
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Else
MsgBox "Body is not being Set"
End If
End Sub
上述子系统调用的子系统为:
Function selectBodyRow(bodyName As String) As Range
Dim rangeStart As String, rangeEnd As String
Dim selectionStart As Range, selectionEnd As Range
Dim result As Range, srchRng As Range, cngrs As Variant
If bodyName = "WEST" Then
rangeStart = "<-WEST START->"
rangeEnd = "<-WEST END->"
ElseIf bodyName = "EAST" Then
rangeStart = "<-EAST START->"
rangeEnd = "<-EAST END->"
End If
Set srchRng = Range("A:A")
srchRng.Select
Set selectionStart = srchRng.Find(What:=rangeStart, After:=ActiveCell, LookIn _
:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
Set selectionEnd = srchRng.Find(What:=rangeEnd, After:=ActiveCell, LookIn _
:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
Set result = Range(selectionStart.Offset(1, 0), selectionEnd.Offset(-1, 0))
result.EntireRow.Select
End Function
函数选择BodyRow(bodyName作为字符串)作为范围
Dim rangeStart作为字符串,rangeEnd作为字符串
Dim选择开始作为范围,选择结束作为范围
Dim结果作为范围,srchRng作为范围,cngrs作为变量
如果bodyName=“WEST”,则
rangeStart=“”
rangeEnd=“”
ElseIf bodyName=“东”然后
rangeStart=“”
rangeEnd=“”
如果结束
设置srchRng=范围(“A:A”)
srchRng.Select
设置selectionStart=srchRng.Find(What:=rangeStart,After:=ActiveCell,LookIn_
:=xlValues,LookAt:=xlPart,SearchOrder:=xlByRows,SearchDirection:=_
xlNext,MatchCase:=False,SearchFormat:=False)
设置selectionEnd=srchRng.Find(What:=rangeEnd,After:=ActiveCell,LookIn_
:=xlValues,LookAt:=xlPart,SearchOrder:=xlByRows,SearchDirection:=_
xlNext,MatchCase:=False,SearchFormat:=False)
设置结果=范围(selectionStart.Offset(1,0),selectionEnd.Offset(-1,0))
result.EntireRow.Select
端函数
按照路人的建议,尝试将您的功能设置为一个范围
set selectBodyRow=result
例如:
Function selectBodyRow(bodyName As String) As Range
Dim rangeStart As String, rangeEnd As String
Dim selectionStart As Range, selectionEnd As Range
Dim result As Range, srchRng As Range, cngrs As Variant
If bodyName = "WEST" Then
rangeStart = "<-WEST START->"
rangeEnd = "<-WEST END->"
ElseIf bodyName = "EAST" Then
rangeStart = "<-EAST START->"
rangeEnd = "<-EAST END->"
End If
Set srchRng = Range("A:A")
srchRng.Select
Set selectionStart = srchRng.Find(What:=rangeStart, After:=ActiveCell, LookIn _
:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
Set selectionEnd = srchRng.Find(What:=rangeEnd, After:=ActiveCell, LookIn _
:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
Set result = Range(selectionStart.Offset(1, 0), selectionEnd.Offset(-1, 0))
result.EntireRow.Select
set selectBodyRow=result
'or set selectBodyRow=result.entirerow
End Function
函数选择BodyRow(bodyName作为字符串)作为范围
Dim rangeStart作为字符串,rangeEnd作为字符串
Dim选择开始作为范围,选择结束作为范围
Dim结果作为范围,srchRng作为范围,cngrs作为变量
如果bodyName=“WEST”,则
rangeStart=“”
rangeEnd=“”
ElseIf bodyName=“东”然后
rangeStart=“”
rangeEnd=“”
如果结束
设置srchRng=范围(“A:A”)
srchRng.Select
设置selectionStart=srchRng.Find(What:=rangeStart,After:=ActiveCell,LookIn_
:=xlValues,LookAt:=xlPart,SearchOrder:=xlByRows,SearchDirection:=_
xlNext,MatchCase:=False,SearchFormat:=False)
设置selectionEnd=srchRng.Find(What:=rangeEnd,After:=ActiveCell,LookIn_
:=xlValues,LookAt:=xlPart,SearchOrder:=xlByRows,SearchDirection:=_
xlNext,MatchCase:=False,SearchFormat:=False)
设置结果=范围(selectionStart.Offset(1,0),selectionEnd.Offset(-1,0))
result.EntireRow.Select
设置selectBodyRow=结果
'或设置selectBodyRow=result.entirerow
端函数
您必须在selectBodyRow
中返回一些内容。正确的语法是什么?Return似乎是为错误保留的。明白了。谢谢我知道这些都是基本问题。在过去的两周里,我一直在通过反复试验来自学VBA。祝你好运,这就是我15年来一直在做的事情。听起来很痛苦。