我是VBA领域的初学者,如果有人能帮助我,我将不胜感激。
基本上r1
和c1
是用于选择行和列的变量,这有助于我选择定义的范围。
但是,当我尝试对此选定范围进行排序时,会弹出error 1084
。我已经尝试了很多版本的排序方法,但问题仍然存在。这是我的代码
With ActiveWorkbook.Worksheets("Main").Sort
.SortFields.Clear
.SortFields.Add Key:=Range(Cells(8, 1), Cells(r1 + 5000, c1 + 8)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range(Cells(8, 1), Cells(r1 + 5000, c1 + 8))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
答案 0 :(得分:0)
问题在于这两行
Key:=Range(Cells(8, 1), Cells(r1 + 5000, c1 + 8))
和
.SetRange Range(Cells(8, 1), Cells(r1 + 5000, c1 + 8))
您的范围和单元格对象不是完全限定的。试试这个(未经测试)
同样在.SortFields.Add
中,Key:
应仅引用一列。例如,如果您要对第1列进行排序,请将Key:=Range(Cells(8, 1), Cells(r1 + 5000, c1 + 8))
更改为Key:=Range(Cells(8, 1), Cells(r1 + 5000, 1))
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Main")
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range(ws.Cells(8, 1), ws.Cells(r1 + 5000, 1)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws.Range(ws.Cells(8, 1), ws.Cells(r1 + 5000, c1 + 8))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
不知怎的,我仍然更喜欢Excel 2003的排序方式。例如
ws.Somerng.Sort Key1:=ws.Range("A2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal