#excel #vba #outlook
Вопрос:
Когда у меня не открыто приложение excel, возникает следующая ошибка :
Компонент ActiveX не может создать объект
Шаги по воспроизведению проблемы :
1 Откройте Outlook, ALT F11 И Вставьте следующий подраздел :
Sub Test() Dim myXL As New Excel.Application Set myXL = GetObject(, "Excel.Application") Set wb = myXL.Workbooks.Open("MyPathMyXL.xlsx") End Sub
- Закройте ВСЕ ваши файлы Excel
- Запустите дополнительный тест из outlook.
Ошибка будет выведена на :
Set myXL = GetObject(, "Excel.Application")
Как я могу избежать этой ошибки ?
Комментарии:
1. Если вам нужен новый экземпляр, вам это не нужно
GetObject
. Просто используйтеmyXL
напрямую, так как вы объявили об этомAs New
(что, на мой взгляд, является плохой практикой).2. @Рори
I tried As New
, и проблема была все той же3. Я думаю, вы пропустили ту часть, где говорилось о том, чтобы не использовать
GetObject
.4. @Действительно, Рори…
Ответ №1:
Лучшим вариантом должен быть следующий способ, я думаю:
Dim objexcel As Object On Error Resume Next 'firstly, try catching the existing open session, if any: Set objexcel = GetObject(, "Excel.Application") If err.Number lt;gt; 0 Then 'if no any existing session, create a new one: err.Clear: Set objexcel = CreateObject("Excel.Application") End If On Error GoTo 0
Имея ссылку на » Microsoft Excel … Библиотека объектов » вы можете объявить
Dim objexcel As Excel.Application
и польза от предложений intellisense…
Также можно найти открытый сеанс Excel, если вы знаете полное имя определенной книги, открытой в нем:
Set objExcel = GetObject(ThisWorkbook.fullName).Application Debug.Print objExcel.hwnd
Или даже для новой книги, открытой сторонним приложением в новом сеансе, как «Книга 1»:
Set objExcel = GetObject("Book1").Application Debug.Print objExcel.hwnd
Если соответствующее приложение отбрасывает новые книги (и открывает их в том же сеансе), называя их «Книгой 2», «Книгой 3» и т. Д., Для ее получения можно использовать цикл, объединяющий имя книги с корнем «Книга» с увеличенной переменной.