【发布时间】:2019-09-07 04:47:02
【问题描述】:
我正在尝试使用 VBA 对动态范围进行排序,但遇到错误。我是 VBA 新手,所以我认为这可能是语法问题,但我一直无法在此站点或其他站点上找到解决方案。
我已经:
- 对我使用的每个范围都使用了工作表对象引用。
- 复制了一个早期有效的代码块,只是将工作表引用更改为正确的工作表。
- 添加了每次排序后清除排序字段的代码。
- 我已将
.Apply移到End With之后。
这些都不起作用。
问题代码如下:
With Worksheets("Shipping").Sort
.SortFields.Add Key:=Worksheets("Shipping").Range("A1"), Order:=xlAscending
.SortFields.Add Key:=Worksheets("Shipping").Range("C1"), Order:=xlAscending
.SortFields.Add Key:=Worksheets("Shipping").Range("D1"), Order:=xlAscending
.SetRange Worksheets("Shipping").Range("A1:J" & Worksheets("Shipping").Range("B2").End(xlDown).Row)
.Header = xlYes
End With
Worksheets("Shipping").Sort.Apply
Worksheets("Shipping").SortFields.Clear
这是有效的代码,位于问题代码之前:
With Worksheets("Backorders").Sort
.SortFields.Add Key:=Worksheets("Backorders").Range("J1"),Order:=xlAscending
.SortFields.Add Key:=Worksheets("Backorders").Range("A1"),Order:=xlAscending
.SortFields.Add Key:=Worksheets("Backorders").Range("C1"),Order:=xlAscending
.SortFields.Add Key:=Worksheets("Backorders").Range("D1"),Order:=xlAscending
.SetRange Worksheets("Backorders").Range("A1:J" & Worksheets("Backorders").Range("B2").End(xlDown).Row)
.Header = xlYes
.Apply
.SortFields.Clear
End With
每次尝试调试,我都会收到以下错误:
运行时错误“1004”:
应用程序定义或对象定义的错误
【问题讨论】:
-
错误在哪一行?
-
会遍历整个block,但是尝试
.Apply时会弹出错误 -
尝试清除块前的排序字段。
-
也尝试过。它“有效”,因为它不会出错,但它会在有机会应用排序之前清除排序字段,这意味着实际上没有排序。
-
在开始添加字段之前清除,而不是之后。