エクセルファイルを開き、その中の情報を更新した後、マクロを数回実行してからExcelファイルを閉じます。問題は、EXCEL.EXEインスタンスが実行されていてもコードが実行され、Accessが閉じられていても、EXCEL.EXEインスタンスがまだアクティブであることです。私はthis postからの推奨事項を、アクセス側とメインマクロが実行された後に呼び出されるExcelファイル内のマクロとして、プロセスの実行状態にかかわらず試してみました。私は二重チェックして、実行するコード内の他の場所にExcelへの参照を開く何もありませんし、ExcelマクロはExcelの新しいインスタンスを開くこともありません。EXCEL.EXEを閉じるとExcelが終了する
私はExcel 2016とAccess 2007を使用しています(会社ポリシーのため、新しいバージョンのAccessにアップグレードすることはできません)。次のように
私は、Excelファイルを開くマクロを実行すると、Excelアプリケーションを閉じるために使用している元のコードは次のとおりです。
Dim XL As Excel.Application
Dim WB As Excel.Workbook
Dim WS As Excel.Worksheet
Set XL = New Excel.Application
XL.Visible = False
XL.DisplayAlerts = False
Set WB = XL.Workbooks.Open(Exporter)
Set WS = WB.Sheets(1)
For i = 0 to 9
'-Generate data to place in excel sheet here-
WS.Range("A1") = SomeData
WS.Range("B1") = SomeOtherData
XL.Run "Excel Macro"
Next i
Set WS = Nothing
WB.Close False
Set WB = Nothing
XL.Quit
Set XL = Nothing
これはOKと思われるので、Excelマクロ内にあると仮定します。 '' Excelマクロ ''のコードを何かに変更してみてください。また、コードでは文字体裁の引用符を使用しないでください。 – Andre
私は 'debug.print'でコメントを印刷して終了し、タスクマネージャを見て、EXCEL.EXEの新しいインスタンスが終了しないサブを作った。 – 110SidedHexagon
クレイジーアイデア:あなたがアクセスしているすべての**オブジェクト( 'Sheets'コレクション、およびアクセスされたすべての' Range'オブジェクトを含む)への参照を保持し、それらをクリーンアップコードの 'Nothing'に' Set'します。これはVBAコードだから*必要ではないはずですが、COM interopコードでは、残っているゴーストプロセスを正しく終了させる方法です。 –