Sir*_*een 17 excel vba excel-vba
我目前正在使用Workbooks.Open处理目录中包含的大量文件.但是打开和关闭这些文件会使文件出现在任务栏中,我希望避免不断闪烁.
我得到了一个建议,我可以CreateObject用来创建一个新实例,因为它打开一个隐藏的新Excel实例.
在性能方面打开新工作簿的两种方式之间是否还有其他差异?
另外,我应该只使用一个使用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)
后期绑定比早期绑定稍慢,但您可能甚至没有注意到差异.是的,您可以使用一个实例来处理所有工作簿.请注意:
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)
务必关闭错误陷阱中的所有实例.