質問: Nothing DoCmd.SetWarnings False DoCmd.OpenQuery ("Q_CHK_Clear") DoCmd.SetWarnings True MsgBox "END" End Sub ``` ★困っていること きちんとExcelマクロは実行され終了するのですが、処理が終わってACCESSに戻ってきたときにエラーが発生します。 『EE.Run "シミュ_Macro"』の部分です。 エラー内容はオートメーションエラー(実行時エラー440)です。 ネットなどで調べてみると、そのあとのCloseとQuitがないとExcelファイルが占有状態になると記載があったのですが。。。 ちなみにExcelのコードで最後に下記の処理を実施してACCESSに戻ろうとしています。 ``` For Each wb In Workbooks If Not wb Is ThisWorkbook Then wb.Close SaveChanges:=True End If Next wb ThisWorkbook.Close SaveChanges:=True ``` 宜しくお願い致します。
回答: 単純に、 "シミュ_Macro" 内で、 `ThisWorkbook.Close SaveChanges:=True` で、自分自身を閉じているのに、 さらにAccessの方で、 `wb.Close` ともう一度閉じようとしているのでエラーになっているように 思えます。 どちらかの Close を削除すればいいのでは。 > > ネットなどで調べてみると、そのあとのCloseとQuitがないとExcelファイルが占有状態になると記載があったのですが。。。 > > > 一回、Closeすれば十分でしょう。閉じてすでに存在してないものをさらに閉じようとすればエラーになるのは当然のことだと。 追記 サンプルを作成して実験してみました。 Excel の標準モジュール ``` Public Sub シミュ_Macro() MsgBox "シミュ_Macro実行!" ThisWorkbook.Close SaveChanges:=False End Sub ``` Accessの標準モジュール ``` Public Sub ZZZZZZ() Dim EE As Object, wb As Object Set EE = CreateObject("Excel.Application") '本番はfalse EE.Visible = True EE.UserControl = False Set wb = EE.Workbooks.Open("C:\TEST\MacroTest.xlsm") EE.Run "シミュ_Macro" wb.Close EE.Quit Set wb = Nothing Set EE = Nothing MsgBox "END" End Sub ``` これを実行すると、`EE.Run "シミュ_Macro"`で、 ``` 実行時エラー'440': オートメーションエラーです。 ``` とエラーがでます。 オープンしたwbが `シミュ_Macro` 内でCloseされて参照できなくなったからだと思われます。 `シミュ_Macro`内の`ThisWorkbook.Close SaveChanges:=False`をコメントアウトして実行したら、 エラーなく最後まで実行され、"END" とメッセージが表示されました。