Отключить обновление экрана, автоматический расчет в Excel из Access VBA - PullRequest
0 голосов
/ 08 ноября 2019

Может ли кто-нибудь помочь с запуском свойств .application в книге Excel из Access VBA?

Я использую Access VBA для экспорта данных в Excel, открытия файла и форматирования файла (добавления формул и т. Д.). Код успешен, за исключением невероятно медленного. Я хочу отключить обновления экрана и изменить вычисления в Excel на ручные. Тем не менее, следующий код не работает. .ScreenUpdating = false не приводит к ошибкам во время выполнения, но экран все равно обновляется, как если бы код игнорировался. .Application.Calculation выдает ошибку времени выполнения 1004.

Dim Xl As Excel.Application
Dim XlBook As Excel.Workbook

Set Xl = CreateObject("Excel.Application")
        Set XlBook = GetObject(Forms!Main!Final_filepath)
        XlBook.Activate
        XlBook.Windows(1).Visible = True



'Hide alerts to prevent interruptions when running code
    Xl.Application.DisplayAlerts = False  '<---- No errors
    Xl.Application.ScreenUpdating = False   '<---- No errors, but screen updating isn't disabled. 
    Xl.Application.Calculation = xlCalculationManual  '<---- Run-Time Error 1004 

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Я понял это! Мой оригинальный код фактически открывал два экземпляра Excel - «Xl» и «XlBook» Xl открывается как Excel, но без каких-либо открытых рабочих книг. XlBook открывается как Excel, с загруженной книгой (из пути к файлу в форме доступа).

Приложение Xl.Application попыталось применить свойства рабочей книги к окну Excel без загруженной рабочей книги. Следовательно ошибка времени выполнения для .Calculation. При отсутствии открытой книги .DisplayAlerts и .ScreenUpdating не имеют смысла, но не создавали ошибку времени выполнения - просто код не может фактически применить ее к рабочей книге, поскольку на самом деле ни одна рабочая книга не открыта. Я полагаю, если я впоследствии открою рабочую книгу после того факта, что свойства будут применены?

Таким образом, вместо ссылки на Xl я ссылался на XlBook, чтобы свойства можно было применить к открытой книге. Я удалил все ссылки на Xl, так как понял, что это избыточное окно Excel и в любом случае не нужно.

Dim XlBook As Excel.Workbook
'Open Excel workbook, and set reference to worksheet
    Set XlBook = GetObject(Forms!main!Final_filepath)
    XlBook.Activate
    XlBook.Windows(1).Visible = True

'Disable calcs and screen updating to increase speed
    XlBook.Application.Calculation = xlCalculationManual
    XlBook.Application.ScreenUpdating = False
0 голосов
/ 08 ноября 2019

Вы используете позднее связывание без Excel Enum. Попробуйте вместо этого использовать значение -4135. Или -4105 для xlcalculationAutomatic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...