プロが教える店舗&オフィスのセキュリティ対策術

VBからExcelを起動しています。

Set xlSheet = CreateObject("Excel.Application")
xlSheet.Workbooks.Open FileName:="C:\My Documents\demo.xls"

Excelでの処理が終わった時、Excelを終了させます。

xlSheet.Quit

「Quit」で終わらせているのですが、
どうも「プログラムの強制終了」で見る限り
Excelが残ったままです。
対処策はあるのでしょうか?
教えてください。お願いします。

A 回答 (2件)

Setで作成したObjectにはNothingをセットして消してください。



Set xlSheet = Nothing

この回答への補足

お返事ありがとうございます。

現在、Qutiの後に Nothingも記述しています。
それでも、残骸があるのです。

補足日時:2002/03/08 10:01
    • good
    • 0

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!