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

时间:2012-10-24 07:15:56

标签: excel vba excel-vba

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

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

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

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

2 个答案:

答案 0 :(得分:18)

Workbooks.Open使用当前的MS Excel实例,CreateObject(“Excel.Application”)创建一个新的MS Excel实例。您可以阅读CreateObject here

在创建新实例后简单地发出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")

关于你的其他问题

  

另外,我应该只使用一个使用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
'

答案 1 :(得分:6)

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

Dim xl As New Excel.Application

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

除非您说:

,否则不会显示
xl.Visible = True

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