0

まず、プログラムがさまざまなバージョンの Excel を備えたさまざまなマシンで実行されているため、LateBinding を使用する必要があることを述べたいと思います。

Excel アプリケーションのオブジェクトの作成を開始するために呼び出すことができるモジュールで Public Sub を宣言しました。

'Declare Public Excel Variable to Call from one place and easy manipulation
Public xlApp As Object
Public wb As Object
Public wb2 As Object
Public ws As Object
Public ws2 As Object

Public Sub InitializeExcel()
    'Create the Excel Objects
    Set xlApp = CreateObject("Excel.Application")
End Sub

そして、Excel アプリケーションを使用して作成するすべてのサブルーチンで、InitializeExcelを呼び出し、すべての最後で次のことを行います。

On Error Resume Next
xlApp.Quit
Set xlApp = Nothing
Set wb = Nothing
Set wb2 = Nothing
Set ws = Nothing
Set ws2 = Nothing    

私の質問はこれです:

Excel アプリケーションを必要とするすべてのサブルーチンでInitializeExcelを呼び出す必要がありますか?それとも、アプリケーションの開始時に 1 回だけ呼び出すことができますか?

4

1 に答える 1

0

いくつかのことをテストしたところ、次の結果が得られました。

InitializeExcel前述のように、すべてのサブルーチンの最後に、Excel アプリケーション オブジェクトであるxlappをNothingに設定するため、毎回呼び出す必要があります。

各サブルーチンの を削除すると、 を Excel アプリケーション オブジェクトとしてSet xlApp = Nothing「再利用」できます。xlAppただし、これにより、Excel アプリケーションがバックグラウンドで実行され続け、新しいワークブックを開くたびに、Excel アプリケーションの別のインスタンスが実行されるという問題が発生します。

したがって、最善の方法は、プロシージャが呼び出された各ルーチンで呼び出しInitializeExcelてからすべてを設定する初期セットアップだったと思います。Nothing

于 2013-04-19T02:50:42.583 に答える