【问题标题】:Application errors when sorting in excel vba在 excel vba 中排序时出现应用程序错误
【发布时间】:2020-07-02 12:16:52
【问题描述】:

我正在尝试使用 VBA 对数据进行排序。这个范围会改变,所以每次运行宏时都需要确定。如果我使用下面的代码,我会收到 1004 应用程序错误。

Sub CaseRevToDo()

Set WBToDo = ThisWorkbook.Worksheets("ToDo")
Set TblToDo = WBToDo.ListObjects("Table11")
Set WBConReport = Workbooks.Add
WBToDo.Activate

WBToDo.ListObjects("Table11").Range.AutoFilter Field:=8, Criteria1:="<=" & Date + 30, _
   Operator:=xlOr, Criteria2:="Overdue"

WBToDo.Application.Union(Columns(2), Columns(3), Columns(9)).Copy

WBConReport.Worksheets("Sheet1").Range("A:C").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
    :=True, Transpose:=False
WBConReport.Worksheets("Sheet1").Columns("A").ColumnWidth = 20
WBConReport.Worksheets("Sheet1").Columns("C").ColumnWidth = 10

WBConReport.Worksheets("Sheet1").Range("A9", Range("C9").End(xlDown)).Sort key1:=Range("C9"), order1:=xlAscending, Header:=xlNo  *** Error on this line


End Sub

我已尝试为该工作表指定范围,如下所示:

WBConReport.Worksheets("Sheet1").Range("A9:C114").Sort key1:=Range("C9"), order1:=xlAscending, Header:=xlNo

然后我收到一条错误消息,指出我的排序参考无效。问题似乎是我如何引用范围,但我找不到它。

【问题讨论】:

  • 限定Range 所在的工作簿/工作表。
  • 您还应该限定Columns 在/在Columns(2), Columns(3), Columns(9) 中的工作簿/工作表。
  • @BigBen,好的。你能解释一下“合格”的确切含义吗?我将工作簿/工作表设置为在宏开头添加的工作簿,但我必须误解它的作用。具有列的工作簿设置为不同的工作簿。
  • key1:=Range("C9")... "qualify" 表示指定Range("C9") 所在的工作簿/工作表。这里你没有指定,所以有一个隐含的ActiveSheet
  • 使用RangeCellsRowsColumns 时的最佳做法是确保引用它们所在的工作表/工作簿。那就是“合格”。

标签: excel vba


【解决方案1】:
With WBConReport.Worksheets("Sheet1")
    .Range("A9", .Range("C9").End(xlDown)).Sort key1:=Range("C9"), order1:=xlAscending, Header:=xlNo
End With

您必须准确指定(“限定”)每个范围所属的位置。在您的代码中,您必须明确指定 "A9" 和 "Range("C9").End(xlDown)" 属于 BConReport.Worksheets("Sheet1")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多