我在活动工作簿的工作表BA8
中的单元格BN10
中有一系列数据,并且包括"HR Eval Report"
。
我希望根据单元格BC8:BC10
中的值按升序对此范围进行排序。以下是导致问题的代码部分:
Dim rngOutData As Range
...
ActiveWorkbook.Worksheets("HR Eval Report").Range("BA8").Select
Set rngOutData = ActiveWorkbook.Worksheets("HR Eval Report").Range(Selection, _
Selection.End(xlToRight)).Select
Set rngOutData
语句抛出错误。我已经尝试完全限定范围,因为类似的424
问题答案表明作为解决方案,但它没有解决问题。任何建议都非常感谢。
答案 0 :(得分:1)
您需要声明对象并使用它。避免使用选择。您可能希望看到This
以下是一种在BC8
Dim rngOutData As Range
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("HR Eval Report")
Set rngOutData = ws.Range("BA8:BN10")
With rngOutData
.Sort Key1:=ws.Range("BC8"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
注意:如果您的数据没有标题,请按照以下评论中的@Jeeped正确建议将Header:=xlYes
更改为Header:=xlNo
。
答案 1 :(得分:0)
您的代码抛出错误的原因是您尝试将Range.Select
的返回值分配给对象变量。但是,Select
方法不返回对象,它返回True
(如果已成功选择范围)。
有两种方法可以准确地实现代码尝试的操作:选择范围,然后将选择分配给对象变量:
ActiveWorkbook.Worksheets("HR Eval Report").Range("BA8").Select
ActiveWorkbook.Worksheets("HR Eval Report").Range(Selection, _
Selection.End(xlToRight)).Select
Set rngOutData = Selection
或将范围分配给变量,然后选择:
ActiveWorkbook.Worksheets("HR Eval Report").Range("BA8").Select
Set rngOutData = ActiveWorkbook.Worksheets("HR Eval Report").Range(Selection, _
Selection.End(xlToRight))
rngOutData.Select
然而,几乎可以肯定有更好的方法来实现排序细胞的总体目标,通常应该避免使用Select
(see this question for more)。例如,要将相同的范围转换为rngOutData
,以下内容更快,更强大且更易于阅读:
With ActiveWorkbook.Worksheets("HR Eval Report")
Set rngOutData = .Range(.Range("BA8"), .Range("BA8").End(xlToRight))
End With
类似的事情适用于ActiveWorkbook
- 通常最好有一个包含对工作簿的引用的变量并使用它。
答案 2 :(得分:-1)
试试这个,只需按照'如果你......步骤
Sub order()
Sheets("HR Eval Report").Select
Range("BC8").Select
ActiveWorkbook.Worksheets("HR Eval Report").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("HR Eval Report").Sort.SortFields.Add Key:=Range("BC8"), _
SortOn:=xlSortOnValues, order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("HR Eval Report").Sort
.SetRange Range("BA8:BN10")
.Header = xlNo ' IF YOU HAVE TITLE ON THE COLUMN THEN SET .Header x1Yes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub