Excel 2007返回“应用程序定义的或对象定义的错误”

时间:2010-07-27 17:37:51

标签: excel-2007

我有Excel 2007和Windows XP 当此代码运行时:

Columns("A:G").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B20000") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A20000") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("F2:F20000") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:G20000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Application.Calculation = xlCalculationAutomatic

它在.Apply处抛出错误:

Application-defined or object-defined error

需要注意的一点是Application.Calculation = xlCalculationManual

此外,除了切换标签和打开办公室菜单外,我无法在UI中执行任何操作,我必须转到任务管理器并单击结束任务退出,然后询问是否要保存。按取消不会修复它。如果我点击“否”,它就会关闭。如果我点击是,它会计算,然后询问我是否要恢复我的工作。

2 个答案:

答案 0 :(得分:0)

我将Application.Calculation = xlCalculationAutomatic移到了它之前,然后修复了它。

Application.Calculation = xlCalculationAutomatic
Columns("A:G").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B20000") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A20000") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("F2:F20000") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:G20000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

编辑:哎呀,它毕竟不是。

答案 1 :(得分:0)

嗯,事实证明除非计算机加载了正在运行的程序,否则它不会发生。我做了很好的重写,现在速度要快得多。这个问题似乎得到了解决。