こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

以上、よろしくお願いいたします。

投稿日時 - 2018-05-31 18:07:44

QNo.9503853

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2018-06-06 09:51:38

お礼

HohoPapaさん

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

投稿日時 - 2018-06-15 10:38:58

ANo.1

その1

If bolExcelFlag = True Then
↑のコードで使っている変数をどこで宣言しているのか気になります。
プロシージャレベル変数になっている可能性はありませんでしょうか?


その2

どこかで、
Exit_cmd02_Click:
を直接呼び出している可能性はありませんでしょうか?


その3

Private Sub ExcelOut()
この中でエクセルの起動やブックのオープンを行っていますのでl
私だったら、
この中でエラー処理を行い、そのエラー処理で
必要なブックやエクセルのクローズ処理を行います。
※そのほうが、コードが読みやすいです。

投稿日時 - 2018-06-03 09:34:16

お礼

HohoPapa様

回答ありがとうございます。
以下に回答させて頂きます。

その1

If bolExcelFlag = True Then
↑のコードで使っている変数をどこで宣言しているのか気になります。
プロシージャレベル変数になっている可能性はありませんでしょうか?

→オブジェクト内のグローバル変数にしております。

その2

どこかで、
Exit_cmd02_Click:
を直接呼び出している可能性はありませんでしょうか?

→サーチしましたが、呼びだしている個所はありませんでした。

その3

Private Sub ExcelOut()
この中でエクセルの起動やブックのオープンを行っていますのでl
私だったら、
この中でエラー処理を行い、そのエラー処理で
必要なブックやエクセルのクローズ処理を行います。
※そのほうが、コードが読みやすいです。

→ご指摘ありがとうございます。
 参考にさせて頂きます!

投稿日時 - 2018-06-04 11:37:04

あなたにオススメの質問