我目前Workbooks.Open
用于处理目录中包含的大量文件。但是打开和关闭这些文件会使文件出现在任务栏中,我想避免不断闪烁。
我得到了一个建议,我可以用它CreateObject
来创建一个新实例,因为这会打开一个隐藏的新 Excel 实例。
两种打开新工作簿的方式在性能方面还有其他区别吗?
另外,我应该只使用创建的一个 Excel 实例
CreateObject
来打开所有工作簿,还是需要为我必须处理的每个工作簿创建一个实例(这似乎浪费了大量内存和降低速度)?
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
'
后期绑定比早期绑定稍慢,但您甚至可能没有注意到差异。是的,您可以对所有工作簿只使用一个实例。请注意:
Dim xl As New Excel.Application
xl.Workbooks.Open "z:\docs\test.xlsm"
除非您说:
xl.Visible = True
请务必关闭错误陷阱中的所有实例。