【问题标题】:VBA: Sorting worksheets with macroVBA:使用宏对工作表进行排序
【发布时间】: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 限定符的信息,但因为我总是限定范围而忘记了。

标签: excel vba sorting


【解决方案1】:

您在With 中遗漏了一些.,但我认为排序不正确。

这对我有用:

Sub Sort()

    Dim sht As Worksheet
    Dim sortField As Range
    Dim keySort As Range

    Set sht = Worksheets("Updated 1.0")

    With sht
        Set sortField = .Range("A1").CurrentRegion
        Set keySort = .Range("A1")
        sortField.Sort Key1:=keySort, Order1:=xlDescending, MatchCase:=False, _
                       Orientation:=xlSortRows
    End With

End Sub

【讨论】:

  • 谢谢,但它仍然没有纠正 with 块中排序行的错误
猜你喜欢
  • 2016-11-21
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2012-10-28
  • 2011-07-23
  • 1970-01-01
相关资源
最近更新 更多