我目前正在使用Workbooks.Open
来处理目录中包含的大量文件。但是打开和关闭这些文件会使文件出现在任务栏中,我希望避免不断闪烁。
我得到了一个建议,我可以使用CreateObject
创建一个新实例,因为它会打开一个隐藏的新Excel实例。
在性能方面打开新工作簿的两种方式之间是否存在其他差异?
另外,我应该只使用一个使用CreateObject
创建的Excel实例打开所有工作簿,还是需要为每个必须处理的工作簿创建一个实例(,这似乎是一个浪费大量内存和降低速度)?
答案 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
请务必关闭错误陷阱中的所有实例。