17

私は現在Workbooks.Open、ディレクトリに含まれる多数のファイルを処理するために使用しています。しかし、これらのファイルを開いたり閉じたりすると、ファイルがタスクバーに表示されるので、常にちらつくのを避けたかったのです。

CreateObject非表示になっている新しいExcelインスタンスが開くので、新しいインスタンスを作成するために使用できるという提案がありました。

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

  2. また、を使用して作成したExcelのインスタンスを1つだけ使用CreateObjectしてすべてのブックを開く必要がありますか、それとも処理する必要のあるブックごとに1つのインスタンスを作成する必要がありますか(メモリの浪費と速度の低下のようです)?

4

2 に答える 2

18

Workbooks.Open現在のMSExcelインスタンスを使用してCreateObject(“Excel.Application”)、新しいMSExcelインスタンスを作成します。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")

他の質問について

また、CreateObjectを使用して作成されたExcelの1つのインスタンスを使用してすべてのワークブックを開く必要がありますか、それとも処理する必要のあるワークブックごとに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
'
于 2012-10-24T07:22:05.330 に答える
6

遅延バインディングは早期バインディングよりもわずかに遅いですが、違いに気付かない場合もあります。はい、すべてのワークブックに1つのインスタンスを使用するだけで使用できます。これに注意してください:

Dim xl As New Excel.Application

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

次のように言わない限り、表示されません。

xl.Visible = True

エラートラップ内のインスタンスは必ず閉じてください。

于 2012-10-24T10:09:53.683 に答える