我在Access中使用VBA宏将数据放入Excel。到目前为止,一切进展顺利,但是现在我在Excel中有了数据,我想根据我创建的这个新列对数据进行排序。我到处搜索了不同的排序语法示例,但是没有任何效果。最接近的是这给了我一个运行时错误438“对象不支持此属性或方法”。我要做的就是根据第一列的数据(仅数字)对整个工作表中的数据进行排序。
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Visible = True
.Workbooks.Add
.Sheets("Sheet1").Select
End With
'More code is here in between that gets data into Excel file
'This code not shown works as expected
With xlApp
.Range("A1").EntireColumn.Insert
.Cells(1, 1).Value = "DayOfWeek"
For i = 2 To 10000
.Cells(i, 1).Value = Weekday(xlApp.Cells(i, 2).Value, vbMonday)
Next i
'Works as expected up to here, next line is problem
.Sort Key1:=.Range("A2"), Order1:=xlAscending
End With
编辑:在我初始化xlApp的部分中添加了此内容,并修复了Order1并在“单元格”调用中添加了“值”,以使代码更加清晰如所建议。另外,应该注意,在调试中,我可以看到排序调用之前的所有内容在Excel工作簿中都给出了正确的输出。
With xlApp
.Range("A1").EntireColumn.Insert
.Cells(1, 1).Value = "DayOfWeek"
For i = 2 To 10000
.Cells(i, 1) = Weekday(.Cells(i, 2), vbMonday)
Next i
'Works as expected up to here, next line is problem
.Cells.Sort Header:=xlYes, Key1:=.Range("A2"), Order1:=xlAscending
End With
我认为这里有很多问题:-
我怀疑xlApp是Application
对象,您正在其中尝试对Worksheet
对象运行操作。用已声明并分配给xlApp
的另一个变量替换Worksheet
,或仅使用Activesheet
。
作为一种好习惯,您应该始终引用.Value
对象的Cell
属性,而不是依赖默认属性。这使阅读和维护更加容易。
Sort
方法不是在Worksheet
级别上操作,而是在Range
对象上操作。
参数Order
不存在。它是Order1
,是对Key1
的补充。
根据我的收集,您在第1行有标题。您需要修改Sort
语句以跳过对标题的排序。
这是最后的代码块:
With xlApp.ActiveSheet
.Range("A1").EntireColumn.Insert
.Cells(1, 1).Value = "DayOfWeek"
For i = 2 To 10000
.Cells(i, 1).Value = Weekday(.Cells(i, 2).Value, vbMonday)
Next i
'Works as expected up to here, next line is problem
.Range("A1").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlYes
End With
您必须先对范围进行排序,然后再对其进行排序:
Dim RngRange As Range
Set RngRange = Sheet.Range("A1:A999")
RngRange.Select
RngRange.Sort Key1:=RngRange, Order1:=xlAscending
如果要对一列进行排序并在结果中包括另一列,则RngRange是要排序的所有列,关键是要对哪一列进行排序
[大多数在线示例实际上是错误的,让我发疯。