2012-10-24 60 views
14

我目前使用Workbooks.Open來處理包含在目錄中的大量文件。但是打開和關閉這些文件會使文件出現在任務欄中,我想避免不斷的閃爍。CreateObject(「Excel.Application」).Workbooks.Open和Just Workbooks.Open之間的區別

我得到了一個建議,我可以使用CreateObject來創建一個新的實例,因爲這會打開一個隱藏的新Excel實例。

  1. 打開新工作簿的兩種方式在性能方面是否還有其他區別?

  2. 而且,我應該只使用Excel的一個實例使用CreateObject創建打開所有工作簿或做我需要爲每個工作簿我必須處理(這似乎是大量的內存和更少的浪費創建一個實例速度)?

回答

16

Workbooks.Open使用當前的MS Excel實例和CreateObject(「Excel.Application」)創建一個新的MS Excel實例。你可以閱讀CreateObjecthere

僅在創建新實例後發出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") 

關於你提到的其他問題

另外,我應該只使用Excel的一個實例使用CreateObject來打開所有工作簿創建或做我需要爲每個工作簿我要創建一個實例過程

你不需要幾個實例。你可以使用一個實例。例如

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 
' 
+0

@Siddarth,優秀Siddarth和謝謝你。 –

6

後期綁定比早期綁定稍慢,但您可能沒有注意到其中的差異。是的,您可以爲所有工作簿使用一個實例。需要注意的是這樣的:除非你說

Dim xl As New Excel.Application 

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

將不可見:

xl.Visible = True 

請務必關閉任何情況下,在錯誤的陷阱。