2012-10-24 69 views
14

現在、Workbooks.Openを使用して、ディレクトリに含まれる多数のファイルを処理しています。しかし、これらのファイルを開いたり閉じたりすると、ファイルはタスクバーに表示され、一定のちらつきを避けたいと思っていました。CreateObject( "Excel.Application").Workbooks.OpenとWorkbooks.Openの違い

私は、CreateObjectを使用して、新しいインスタンスを作成することができるという提案を得ました。これは、隠された新しいExcelインスタンスを開くためです。

  1. 新しいワークブックをパフォーマンスの面で開く2つの方法に違いはありますか?

  2. はまた、私はエクセルの1つのインスタンスを使用するすべてのワークブックを開くためにCreateObjectを使用して作成しなければならないか、私は、各ワークブックのための1つのインスタンスを作成する必要があります私が処理しなければならない(多くのメモリの無駄のように思えるが少ないスピード)?

答えて

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") 

、私はエクセルの1つのインスタンスを使用する必要がありますが、すべてのワークブックを開くためにCreateObjectを使用して作成されたか、私は私が持っているそれぞれのワークブックのための1つのインスタンスを作成する必要がありますプロセス

複数のインスタンスは必要ありません。 1つのインスタンスで作業できます。例えば

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、Excellent Siddarthとありがとう。 –

6

結合後期には、事前バインディングよりもわずかに遅いですが、あなたも違いに気付かないかもしれません。はい、すべてのブックに1つのインスタンスを使用するだけで使用できます。あなたが言う場合を除き

Dim xl As New Excel.Application 

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

表示されません::このことに注意してください

xl.Visible = True 

はあなたのエラートラップ内の任意のインスタンスを閉じてください。

関連する問題