我在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并将Value添加到Cells调用以使代码更清晰,如建议的那样。此外,应该注意的是,在调试中,我可以看到排序调用之前的所有内容都在Excel工作簿中提供了正确的输出。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
我认为这里有很多问题: -
我怀疑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
答案 2 :(得分:0)
在对范围进行排序之前,必须先选择范围:
Dim RngRange As Range
Set RngRange = Sheet.Range("A1:A999")
RngRange.Select
RngRange.Sort Key1:=RngRange, Order1:=xlAscending
如果要对一列进行排序并在结果中包括另一列,则RngRange是要排序的所有列,关键是要对哪一列进行排序
大多数在线示例实际上是错误的,让我发疯。