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

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

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

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

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

2 ответа

Решение

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
'

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

Dim xl As New Excel.Application

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

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

xl.Visible = True

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

Другие вопросы по тегам