VBA, Как открыть новый экземпляр excel

#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  
  1. Закройте ВСЕ ваши файлы Excel
  2. Запустите дополнительный тест из 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» и т. Д., Для ее получения можно использовать цикл, объединяющий имя книги с корнем «Книга» с увеличенной переменной.