- 締切済み
AccessでExcelのプロセスが消せない
Access2007を使用してExcelへ出力するプログラムを作っております。 On Error時にExcelのプロセスが消せなくて困っています。 正常に終了した場合は消えているのですが、On Error時には消せないと言うのはなぜでしょう? どなたか教えてください! ロジックは以下の通りです。 Dim xls, Book, newSheet As Object Private Sub cmd02_Click() On Error GoTo Err_cmd02_Click '処理A '処理B '処理C 'ExcelFile出力 Call ExcelOut Exit_cmd02_Click: Exit Sub Err_cmd02_Click: MsgBox ERR.Description 'ExcelがOpenしているかの判断 If bolExcelFlag = True Then 'Open中だったらClose Set newSheet = Nothing Book.Close SaveChanges:=False Set Book = Nothing xls.Quit Set xls = Nothing End If Resume Exit_cmd02_Click End Sub Private Sub ExcelOut() 'Excelオブジェクト作成 Set xls = CreateObject("Excel.Application") '新しいブックを追加 Set Book = xls.Workbooks.Add '新しいシートを追加 Set newSheet = Book.Worksheets(1) 'ExcelFlagをOn bolExcelFlag = True 'ヘッダー出力 Call HeaderOut 'ExcelFile編集メイン Call MainOut '最終のSub Total編集 Call BreakOut 'フッター出力 Call FooterOut 'ファイルの保存 Book.SaveAs (strOutFileName) '各オブジェクトのClose Book.Close xls.Quit Set newSheet = Nothing Set Book = Nothing Set xls = Nothing 'ExcelFlagをOff bolExcelFlag = False End Sub 以上、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
当方で行ってみる限り 注1、注2をコメントアウトすると 現象(エクセルが残る現象)が起き コメントアウトしなければ,現象が起きません。 >プロシージャレベル変数になっている可能性はありませんでしょうか? この行、大丈夫ですね? なお、当方の環境は、Office2016で、 Option Explicit '注1 Dim xls, Book, newSheet As Object Dim bolExcelFlag As Boolean '注2 Sub main() On Error GoTo Err_cmd02_Click 'ExcelFile出力 Call ExcelOut Exit_cmd02_Click: Exit Sub Err_cmd02_Click: MsgBox Err.Description 'ExcelがOpenしているかの判断 If bolExcelFlag = True Then 'Open中だったらClose Set newSheet = Nothing Book.Close SaveChanges:=False Set Book = Nothing xls.Quit Set xls = Nothing End If Resume Exit_cmd02_Click End Sub Sub ExcelOut() Dim wsVal As Integer Set xls = CreateObject("Excel.Application") Set Book = xls.Workbooks.Add Set newSheet = Book.Worksheets(1) bolExcelFlag = True newSheet.cells(3, 1).Value = "AAAA" wsVal = 1 / 0 Book.SaveAs ("D:\wk\aaa.xlsx") '各オブジェクトのClose Book.Close xls.Quit Set newSheet = Nothing Set Book = Nothing Set xls = Nothing 'ExcelFlagをOff bolExcelFlag = False End Sub
- HohoPapa
- ベストアンサー率65% (455/693)
その1 If bolExcelFlag = True Then ↑のコードで使っている変数をどこで宣言しているのか気になります。 プロシージャレベル変数になっている可能性はありませんでしょうか? その2 どこかで、 Exit_cmd02_Click: を直接呼び出している可能性はありませんでしょうか? その3 Private Sub ExcelOut() この中でエクセルの起動やブックのオープンを行っていますのでl 私だったら、 この中でエラー処理を行い、そのエラー処理で 必要なブックやエクセルのクローズ処理を行います。 ※そのほうが、コードが読みやすいです。
お礼
HohoPapa様 回答ありがとうございます。 以下に回答させて頂きます。 その1 If bolExcelFlag = True Then ↑のコードで使っている変数をどこで宣言しているのか気になります。 プロシージャレベル変数になっている可能性はありませんでしょうか? →オブジェクト内のグローバル変数にしております。 その2 どこかで、 Exit_cmd02_Click: を直接呼び出している可能性はありませんでしょうか? →サーチしましたが、呼びだしている個所はありませんでした。 その3 Private Sub ExcelOut() この中でエクセルの起動やブックのオープンを行っていますのでl 私だったら、 この中でエラー処理を行い、そのエラー処理で 必要なブックやエクセルのクローズ処理を行います。 ※そのほうが、コードが読みやすいです。 →ご指摘ありがとうございます。 参考にさせて頂きます!
お礼
HohoPapaさん ありがとうございます。 また、返信が遅くなってしまって申し訳ございませんでした。 なるほど、グローバル変数のbolExcelFlagに問題がありそうですね? そこを中心に色々試してみます。 ありがとうございました。