VBA排序运行时错误438

问题描述 投票:0回答:3

我在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工作簿中都给出了正确的输出。

excel vba sorting syntax
3个回答
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

0
投票

我认为这里有很多问题:-

  1. 我怀疑xlApp是Application对象,您正在其中尝试对Worksheet对象运行操作。用已声明并分配给xlApp的另一个变量替换Worksheet,或仅使用Activesheet

  2. 作为一种好习惯,您应该始终引用.Value对象的Cell属性,而不是依赖默认属性。这使阅读和维护更加容易。

  3. Sort方法不是在Worksheet级别上操作,而是在Range对象上操作。

  4. 参数Order不存在。它是Order1,是对Key1的补充。

  5. 根据我的收集,您在第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

0
投票

您必须先对范围进行排序,然后再对其进行排序:

Dim RngRange As Range
Set RngRange = Sheet.Range("A1:A999")
RngRange.Select
RngRange.Sort Key1:=RngRange, Order1:=xlAscending

如果要对一列进行排序并在结果中包括另一列,则RngRange是要排序的所有列,关键是要对哪一列进行排序

[大多数在线示例实际上是错误的,让我发疯。

© www.soinside.com 2019 - 2024. All rights reserved.