Excel 2007 возвращает ошибку приложения или объекта - PullRequest
0 голосов
/ 27 июля 2010

У меня есть 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

Кроме того, я не могу ничего делать в пользовательском интерфейсе, кроме переключения вкладок и открытия меню офиса, и мне нужно перейти к диспетчеру задач и нажать «Завершить задачу» для выхода, после чего онспрашивает, хочу ли я сохранить.Нажатие отмены не исправляет это.Если я нажму «нет», он просто закроется.Если я нажимаю «да», он вычисляет, а затем спрашивает, хочу ли я, чтобы он восстановил мою работу.

Ответы [ 2 ]

0 голосов
/ 12 октября 2010

Что ж, оказалось, что этого не произойдет, если компьютер не загружен запущенными программами.Я довольно неплохо переписал его, и теперь он стал намного быстрее.Кажется, проблема решена.

0 голосов
/ 28 июля 2010

Я переместил 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

Редактировать: К сожалению, это не так.

...