CreateObject("Excel.Application").Workbooks.Open和Workbooks.Open之间的区别

Sir*_*een 17 excel vba excel-vba

我目前正在使用Workbooks.Open处理目录中包含的大量文件.但是打开和关闭这些文件会使文件出现在任务栏中,我希望避免不断闪烁.

我得到了一个建议,我可以CreateObject用来创建一个新实例,因为它打开一个隐藏的新Excel实例.

  1. 在性能方面打开新工作簿的两种方式之间是否还有其他差异?

  2. 另外,我应该只使用一个使用Excel创建的实例CreateObject来打开所有工作簿,还是需要为每个必须处理的工作簿创建一个实例(这似乎浪费了大量的内存和更低的速度)?

Sid*_*out 18

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")
Run Code Online (Sandbox Code Playgroud)

关于你的另一个问题

另外,我应该只使用一个使用CreateObject创建的Excel实例打开所有工作簿,还是需要为每个必须处理的工作簿创建一个实例

您不需要多个实例.您可以使用一个实例.例如

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
'
Run Code Online (Sandbox Code Playgroud)


Fio*_*ala 6

后期绑定比早期绑定稍慢,但您可能甚至没有注意到差异.是的,您可以使用一个实例来处理所有工作簿.请注意:

Dim xl As New Excel.Application

xl.Workbooks.Open "z:\docs\test.xlsm"
Run Code Online (Sandbox Code Playgroud)

除非你说:

xl.Visible = True
Run Code Online (Sandbox Code Playgroud)

务必关闭错误陷阱中的所有实例.