【发布时间】: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。 -
使用
Range或Cells或Rows或Columns时的最佳做法是确保引用它们所在的工作表/工作簿。那就是“合格”。