VB6からExcelを操作した場合にプロセスが残る?


TAKA  2005-08-05 22:46:24  No: 91296

初めて質問させて頂きます。

VB6でExcelを操作した場合に、オブジェクトの参照は明示的に開放しているのに、
「EXCEL.EXE」プロセスが残ったままになります。
同様の質問がたくさんありましたので、参考にさせて頂いたのですが、
解決に至りませんでした。。
ご教授の程、よろしくお願い致します。

↓が問題のロジックです。

Dim xlsApp As Excel.Application
Dim xlsBook As Excel.Workbook

' 起動済みのエクセルへの参照
Set xlsApp = GetObject(Class:="Excel.Application")
Set xlsBook = xlsApp.Workbooks("TEST.xls")

xlsBook.Sheets("Sheet1").Range("A1").Value = "TEST"
            
xlsBook.Close True
xlsApp.Quit

Set xlsBook = Nothing
Set xlsApp = Nothing


TAKA  2005-08-05 22:54:58  No: 91297

記述忘れです。
Excelは2000です。


あっきー  2005-08-06 07:38:34  No: 91298

WinXP SP2
Excel2000 SP3
の組み合わせでは正常に終了しますが。

参考までに。


m  2005-08-06 20:22:44  No: 91299

Win2000SP4
Excel2000
でも正常に終了しました。

実行した時にExcelは閉じていますか?
プロセスに残っている?


シロクロ  2005-08-10 00:51:00  No: 91300

>xlsBook.Close True

明示的にSaveAsを使用してExcelファイルを保存し、
xlsBook.Close False にしてファイルを閉じてみては
いかがでしょうか


魔界の仮面弁士  2005-08-10 01:07:18  No: 91301

> Dim xlsApp As Excel.Application
> Dim xlsBook As Excel.Workbook

参照設定を外した上で、上記を「As Object」に変更してみてください。
それでコンパイルエラーになる場所があれば、その部分に原因がある
可能性があります。

参照設定を外してもコンパイルが通るにも関わらず、プロセスが
正しく終了しないようであれば、Excel側のスタートアップや
アドイン等についても疑ってみた方がよいでしょう。


TAKA  2005-08-13 02:37:47  No: 91302

皆様、ご回答ありがとうございました。

m 様
> 実行した時にExcelは閉じていますか?
> プロセスに残っている?

xlsApp.QuitでExcelは閉じています。が、
「EXCEL.EXE」プロセスが残ってしまいます。

シロクロ 様
> 明示的にSaveAsを使用してExcelファイルを保存し、
> xlsBook.Close False にしてファイルを閉じてみてはいかがでしょうか

現象は改善されませんでした。

魔界の仮面弁士 様
> 参照設定を外した上で、上記を「As Object」に変更してみてください。
> それでコンパイルエラーになる場所があれば、その部分に原因がある
> 可能性があります。

コンパイルエラーは発生しませんでしたが、現象は改善されませんでした。

> Excel側のスタートアップや
> アドイン等についても疑ってみた方がよいでしょう。

申し訳ありませんが、アドイン等を疑うとは、
具体的に、どのような調査を行うと良いのでしょうか?

引き続き、ご教授の程、宜しくお願い致します。


魔界の仮面弁士  2005-08-13 03:55:50  No: 91303

> 申し訳ありませんが、アドイン等を疑うとは、
> 具体的に、どのような調査を行うと良いのでしょうか?

特定のファイル、(今回はTEST.xls)を開いた時だけ、プロセスが残るのか?
 → Excelファイルの内容に問題が無いか確認

ファイルを開かず、単に Excelを起動/終了させただけでも残るのか?
 → Excelにアドインが組み込まれていないか確認
    組み込まれているなら、それらを外してみて元凶を探す

「〜.Range("A1").Value = "TEST"」の部分があった時だけ残るのか?
 → ファイルの上書き保存に失敗していたりはしないかを確認

実は実行時エラーが発生したけれど、それに気が付いていないとか
 → On Error 等でエラーを無視してしまっていないか確認

何らかのセキュリティ上の問題は起きていないか
 → Administrators権限を持つユーザーが実行しても、同じ状況になるか確認

特定のPC上だけでおきる問題なのか
 → 他の環境で実行させてみて確認
    他の環境で再現しないなら、OSの違いやExcelのバージョンの違いを調査

> Set xlsApp = GetObject(Class:="Excel.Application")
Excelが起動していなかった場合はエラーになるはずですが、
その点は大丈夫でしょうか?

また、複数のプロセスが残っていた場合、上記で取得したExcelが、
『非表示状態のExcel』を指している可能性もあります。
取得後の .Visible 状態も確認してみてください。


お礼  2006-05-02 21:40:13  No: 91304

通りすがりの者です。
私も同じ現象で困っていました。

        '*** 一旦表示させる(この記述がないとプロセスが残ってしまう)
        xlApp.Visible = True
        xlApp.Quit()                    'Excelを閉じる 

魔界の仮面弁士さんの「取得後の .Visible 状態も確認してみてください」の言葉を読み、
上記のように、Quitの前の行でVisibleをTrueにすることで解決しました。
どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加