Я работаю над простым макросом Excel (2010), который обновляет все данные, поступающие из базы данных SQL Server при открытии рабочего листа. Иногда SQL Server должен обновить некоторые данные, что может занять до 45 минут, и в течение этого времени обновление Excel должно ждать, так как обновление выполняется посредством транзакции.
Так что Excel не будет реагировать или даже иногда падать.
Моя цель состоит в том, чтобы, если обновление данных заняло больше времени, чем, скажем, 5 с, оно отменяет обновление и переходит к следующему коду для обработки данных.
Я думал, что мог бы написать маленький асинхронный таймер для обновления, но я много раз читал, что vba Excel однопоточная, и поэтому вы не можете сделать асинхронный таймер.
Затем я хотел проверить состояние соединения SQL OLEDB перед обновлением, но не получил ADODB.Connection
для работы, так как моя версия Excel / VBA не знает класс ADODB и выдает ошибку компилятора .
Простой пример кода:
Private Sub Workbook_Open()
ActiveWorkbook.Connections("db6connection").Refresh
'db6connection is the Name of my Data Connection via Excel with the Connection String:
' Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=p_lin;Data Source=db6
End Sub