执行排序时出现上述错误。我已经完全限定了所有对象并检查了我的变量是否包含正确的值。错误发生在第一行:
With ws.Columns("A:E").Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range("A2:A" & oldLastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws.Range("A1:E" & oldLastRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Run Code Online (Sandbox Code Playgroud)
我如何引用范围似乎并不重要,每一个都给出了相同的错误:
With ws.Range("A:E").Sort
With ws.Range("A1:E" & oldLastRow).Sort
Run Code Online (Sandbox Code Playgroud)
范围的每个单元格中都有数据,列有标题。什么可能导致这个问题?
ws.Columns("A:E").Sort正在调用与工作表类不同Sort的 a 函数:RangeSort
(在 VBA 编辑器中按 F2 进入该屏幕)
因此,如果您只删除.Columns("A:E")代码段的,您的代码可能会起作用,例如:
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range("A2:A" & oldLastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws.Range("A1:E" & oldLastRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Run Code Online (Sandbox Code Playgroud)
您已经说出了要排序的内容,.SetRange ws.Range("A1:E" & oldLastRow)因此您可以看到在With语句中包含它有点多余(以及生成错误)。
PS我明白了
运行时错误“438”:对象不支持此属性或方法