Это не совсем ответ, но он слишком длинный для комментария к ответу @Louis и последующего обсуждения.
On Error Resume Next
обычно является злом, но иногда это лучший способ справиться с утверждением, которое может потерпеть неудачу. В этом случае команда Set objExcelApp = GetObject(, "Excel.Application")
назначит запущенный экземпляр Excel переменной objExcelApp
, но потерпит неудачу (и выдаст ошибку), если Excel в данный момент не активен. Следующий If Error <> 0 Then
проверяет, произошла ли ошибка, и если да, он откроет новый экземпляр Excel и назначит его objExcelApp
.
В этот момент Excel должен быть доступен для макроса, существующего или нового экземпляра. Исключением может быть только то, что Excel вообще недоступен (не установлен) или не может быть запущен (не хватает памяти). Однако On Error Resume Next
все еще активен и будет по-прежнему игнорировать все ошибки времени выполнения, а это bad . Итак, после присвоения переменной вернитесь к стандартной обработке ошибок и посмотрите, что не получается:
'Get Access to the Excel file
On Error Resume Next
Set objExcelApp = GetObject(, "Excel.Application")
If Error <> 0 Then
Set objExcelApp = CreateObject("Excel.Application")
End If
On Error Goto 0