• 締切済み

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 以上、よろしくお願いいたします。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

当方で行ってみる限り 注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

thararom
質問者

お礼

HohoPapaさん ありがとうございます。 また、返信が遅くなってしまって申し訳ございませんでした。 なるほど、グローバル変数のbolExcelFlagに問題がありそうですね? そこを中心に色々試してみます。 ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

その1 If bolExcelFlag = True Then ↑のコードで使っている変数をどこで宣言しているのか気になります。 プロシージャレベル変数になっている可能性はありませんでしょうか? その2 どこかで、 Exit_cmd02_Click: を直接呼び出している可能性はありませんでしょうか? その3 Private Sub ExcelOut() この中でエクセルの起動やブックのオープンを行っていますのでl 私だったら、 この中でエラー処理を行い、そのエラー処理で 必要なブックやエクセルのクローズ処理を行います。 ※そのほうが、コードが読みやすいです。

thararom
質問者

お礼

HohoPapa様 回答ありがとうございます。 以下に回答させて頂きます。 その1 If bolExcelFlag = True Then ↑のコードで使っている変数をどこで宣言しているのか気になります。 プロシージャレベル変数になっている可能性はありませんでしょうか? →オブジェクト内のグローバル変数にしております。 その2 どこかで、 Exit_cmd02_Click: を直接呼び出している可能性はありませんでしょうか? →サーチしましたが、呼びだしている個所はありませんでした。 その3 Private Sub ExcelOut() この中でエクセルの起動やブックのオープンを行っていますのでl 私だったら、 この中でエラー処理を行い、そのエラー処理で 必要なブックやエクセルのクローズ処理を行います。 ※そのほうが、コードが読みやすいです。 →ご指摘ありがとうございます。  参考にさせて頂きます!

関連するQ&A