Разница между CreateObject ( "Excel.Application" ).Workbooks.Откройте и просто Workbooks.Open - программирование
Подтвердить что ты не робот

Разница между CreateObject ( "Excel.Application" ).Workbooks.Откройте и просто Workbooks.Open

В настоящее время я использую Workbooks.Open для обработки большого количества файлов, содержащихся в каталоге. Но открытие и закрытие этих файлов заставляет файлы появляться в панели задач, и я хотел избежать постоянного мерцания.

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

  • Есть ли другая разница между двумя способами открытия новых книг с точки зрения производительности?

  • Кроме того, должен ли я просто использовать один экземпляр Excel, созданный с помощью CreateObject, чтобы открыть все книги или мне нужно создать один экземпляр для каждой рабочей книги, которую я должен обрабатывать (что кажется пустой тратой памяти и меньше скорости)?

4b9b3361

Ответ 1

Workbooks.Open использует текущий экземпляр MS Excel, а CreateObject("Excel.Application") создает новый экземпляр MS Excel. Вы можете читать CreateObject здесь.

Простое создание Workbooks.Open после создания нового экземпляра не гарантирует, что книги будут открываться в новом экземпляре. Вам придется связываться с ним. Например

Dim oXLApp As Object, wb As Object

Set oXLApp = CreateObject("Excel.Application")

'~~> Hide Excel
oXLApp.Visible = False

'~~> Open files
Set wb = oXLApp.Workbooks.Open("C:\Sample.xls")

Относительно вашего другого вопроса

Кроме того, должен ли я просто использовать один экземпляр Excel, созданный с помощью CreateObject, чтобы открыть все книги или мне нужно создать один экземпляр для каждой рабочей книги, которую я должен обработать

Вам не нужно несколько экземпляров. Вы можете работать с одним экземпляром. Например

Dim oXLApp As Object, wb As Object

Set oXLApp = CreateObject("Excel.Application")

'~~> Hide Excel
oXLApp.Visible = False

'~~> Open files
Set wb = oXLApp.Workbooks.Open("C:\Sample1.xls")

'
'~~> Do some Stuff
'

wb.Close (False)

'~~> Open files
Set wb = oXLApp.Workbooks.Open("C:\Sample2.xls")
'
'~~> Do some Stuff
'

wb.Close (False)

'
'~~> And So on
'

Ответ 2

Позднее привязка немного медленнее, чем раннее связывание, но вы можете даже не заметить разницу. Да, вы можете использовать только один экземпляр для всех книг. Обратите внимание, что это:

Dim xl As New Excel.Application

xl.Workbooks.Open "z:\docs\test.xlsm"

Не будет видно, если вы не скажете:

xl.Visible = True

Обязательно закройте все экземпляры в ловушке ошибок.