Обработка исключения (0x800AC472) в приложении Excel. Обновление экрана - PullRequest
3 голосов
/ 02 июля 2019

Я пишу C# VSTO Excel Addin.В моем проекте требуется обновить и объединить большое количество ячеек.

Чтобы уменьшить мерцание и улучшить производительность, я устанавливаю для Application.ScreenUpdating значение false и возвращаюсь кtrue после завершения операции.

Проблема в том, что иногда я возвращаю настройку исключения в состояние true.

Сообщение об ошибке:

(HRESULT: 0x800AC472) (VBA_E_IGNORE).

В этом случае Excel зависает (поскольку обновление экрана отсутствует), и единственный выход - закрыть / снова открыть Excel.

Вот мой код:

 Excel.Application app = somevalue;
    try
    {
        app.ScreenUpdating = false;
        return true;
    }
    catch (Exception e)
    {
        e.LogExceptionError($"SafeEnableScreenUpdating -> param={enable}");
    }

    ... some large operation.

    try
    {
        app.ScreenUpdating = true;
        return true;
    }
    catch (Exception e)
    {
       // exception is here.
        e.LogExceptionError($"SafeEnableScreenUpdating");
    }

Единственное возможное решение, которое я нашел до сих пор, - это сделать цикл и попытаться восстановить состояние несколько раз.Кто-нибудь сталкивался с такой проблемой?

1 Ответ

0 голосов
/ 17 июля 2019

Скорее всего, диалоговое окно отображается во время вызова ScreenUpdating. Вы можете найти похожее исключение, описанное в исключении (HRESULT: 0x800AC472) при использовании Excel.Worksheet.Select после вызова страницы Excel.Workbook.SaveAs .

Кроме того, я бы рекомендовал установить свойства CalculationMode и EnableEvents:

Sub YourSub()
    On Error GoTo EH

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    ' Code here

CleanUp:
    On Error Resume Next
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
Exit Sub
EH:
    ' Do error handling
    GoTo CleanUp
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...