【发布时间】:2017-08-18 00:11:42
【问题描述】:
我正在尝试根据两个不同的条件对范围进行排序。 为了做到这一点,我录制了一个完美运行的宏。
当我尝试将部分宏代码行替换为 我自己的变量等,代码不起作用并向我抛出了几个不同的错误消息。
我得到的第一个是:“运行时错误 438。对象不支持此属性或方法”
收到的另一条错误消息是“运行时错误 1004。排序引用无效。确保它在您要排序的数据内,并且第一个排序依据框不相同或空白的。”
这是来自宏记录器的代码(它有效):
Sub CustomSort()
' CustomSort Macro
Range("A1:H958").Select
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=Range("A2:A958"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=Range("H2:H958"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Run Data from Notes").Sort
.SetRange Range("A1:H958")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
我将代码更改为(不起作用并给我“运行时错误 438”):
Dim StatusRange As Range
Dim PartNumber As Range
Dim WholeRange As Range
Dim wbkToRun As Workbook
Dim NewData As Worksheet
Dim LastRow As Long
Set wbkToRun = ThisWorkbook
Set NewData = Worksheets("Run Data from Notes")
LastRow = NewData.Cells.Find("*", searchorder:=xlByRows, SearchDirection:=xlPrevious).Row
Set WholeRange = NewData.Range("A2:H" & LastRow)
WholeRange.Select
ActiveWorkbook.NewData.Sort.SortFields.Clear
wbkToRun.NewData.Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
wbkToRun.NewData.Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With wbkToRun.NewData.Sort
.SetRange WholeRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
当使用宏记录器代码时,但将范围更改为我的动态设置范围“WholeRange”时,它会给我错误消息:“运行时错误 1004。排序引用无效。确保它在数据内您想要排序,而第一个排序依据框不一样或空白。”
WholeRange.Select
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Run Data from Notes").Sort
.SetRange WholeRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
它在“.Apply”上中断
有人可以解释为什么我上面的两个代码不起作用吗? 我的代码和宏录制的代码有什么区别。 谢谢。
【问题讨论】:
-
NewData不是ActiveWorkbook的成员。只需使用引用本身,而不是尝试从ActiveWorkbook调用它。 -
您能详细说明一下并举个例子吗?没完全明白。谢谢。