【发布时间】:2018-11-20 17:02:06
【问题描述】:
如图所示
我的排序语法错误,我不明白为什么。
我明白了
运行时错误“1004”:排序引用无效。确保它在您要排序的数据内,并且第一个排序依据框不是相同的或空白的。
Sub Sort()
'
' Sort Macro
Dim rowNum As Variant
Dim columnNum As Variant
Dim sortField As Range
Dim keySort As Range
rowNum = Worksheets("Updated 1.0").Range("A1").End(xlDown).row
MsgBox (rowNum)
columnNum = Worksheets("Updated 1.0").Range("A1").End(xlToRight).column
MsgBox (columnNum)
With Worksheets("Updated 1.0")
Set sortField = Range(.Cells(2, 1), .Cells(rowNum, columnNum))
Set keySort = Range("A1")
sortField.Sort Key1:=keySort, Order1:=xlDescending, MatchCase:=False,
Orientation:=xlSortRows
End With
【问题讨论】:
-
@MathieuGuindon - 自从我看到一个范围不合格的问题以来,我一直想知道这一点。如果不合格范围内的两个单元格引用都合格,则该范围也是合格的。选择了不同的工作表
sortfield的父级仍然是Updated 1.0。话虽如此 - 仍然更好地完全限定所有内容。 -
@DarrenBartrup-Cook 在
Sheet1的代码隐藏中,执行Range(Sheet2.Cells(1,1) = 42会引发错误1004。ThisWorkbook的代码隐藏中相同,在标准模块中也是如此。在Sheet1的代码隐藏中,执行Range(Sheet2.Cells(1,1), Sheet2.Cells(2,1)) = 42会引发错误1004(因为隐含的Me限定符),但可以在ThisWorkbook和标准模块中使用。你知道吗,IMO 共享知识很危险(让没有经验的 VBA 开发人员感到困惑)。限定您的范围、期限 - 然后您的代码将工作,无论它是在哪里以及如何编写的。 ;-) -
@MathieuGuindon Point 做得很好,我没有考虑过。我确定我在某处读到了关于在工作表后面使用隐式
Me限定符的信息,但因为我总是限定范围而忘记了。