0

我试图让这个子工作,但没有分配 operationRange 变量。尽管函数 selectBodyRow(bodyName) 工作正常。

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

上述 Sub 调用的 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
4

1 回答 1

2

正如路人所建议的那样,尝试将您的功能设置为一个范围

    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
于 2012-09-27T03:47:11.053 回答