- 締切済み
Excelの残骸
VBからExcelを起動しています。 Set xlSheet = CreateObject("Excel.Application") xlSheet.Workbooks.Open FileName:="C:\My Documents\demo.xls" Excelでの処理が終わった時、Excelを終了させます。 xlSheet.Quit 「Quit」で終わらせているのですが、 どうも「プログラムの強制終了」で見る限り Excelが残ったままです。 対処策はあるのでしょうか? 教えてください。お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
EXCELの残骸・・・ 確かに残ることがあります。 EXCELに対してのコーディングの仕方により、残ることがあるそうです。 ぼくも経験しました。 Set xlSheet = CreateObject("Excel.Application") ・ ・ ・ xlSheet.Quit Set xlSheet = Nothing の間を修正することにより、回避できるそうなのですが・・・ その時はコードが長くてほとんど完成していた物の修正ということもあり、別の方法で強制的に終了させました。 サンプルは、全てのEXCELを閉じるようになってます。 Sub quitAllExcel() Dim strSQL As String Dim objXlsApp As Object Dim lngCnt As Long Dim i As Long 'エクセルの起動している数を得る strSQL = "SELECT Handle FROM Win32_Process WHERE Name = ""EXCEL.EXE""" lngCnt = GetObject("winmgmts:").ExecQuery(strSQL).Count '問い合わせ If lngCnt < 1 Then MsgBox "EXCELは起動してません" GoTo PGMEND ElseIf vbCancel = MsgBox(lngCnt & "個の起動中のEXCELをみつけました。全て破棄終了しますか?", vbOKCancel) Then GoTo PGMEND End If 'エクセル閉じる処理 For i = 1 To lngCnt Set objXlsApp = GetObject(, "Excel.Application") On Error GoTo 0 If Not (objXlsApp Is Nothing) Then Call quitExcel(objXlsApp) Set objXlsApp = Nothing End If Next i PGMEND: End Sub '指定のエクセルアプリケーション内で開いているブック全てを「保存済み」状態にして終了させる Sub quitExcel(inObjXlsApp As Object) Dim objXlsBook As Object For Each objXlsBook In inObjXlsApp.WorkBooks objXlsBook.Saved = True Next objXlsBook inObjXlsApp.Quit End Sub
- bin-chan
- ベストアンサー率33% (1403/4213)
Setで作成したObjectにはNothingをセットして消してください。 Set xlSheet = Nothing
補足
お返事ありがとうございます。 現在、Qutiの後に Nothingも記述しています。 それでも、残骸があるのです。