17

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

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

  1. 两种打开新工作簿的方式在性能方面还有其他区别吗?

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

4

2 回答 2

18

Workbooks.Open使用当前的 MS Excel 实例并CreateObject(“Excel.Application”)创建一个新的 MS Excel 实例。你可以在CreateObject 这里阅读。

在创建新实例后简单地发出 aWorkbooks.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
'
于 2012-10-24T07:22:05.330 回答
6

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

Dim xl As New Excel.Application

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

除非您说:

xl.Visible = True

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

于 2012-10-24T10:09:53.683 回答