初めて質問させて頂きます。
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
記述忘れです。
Excelは2000です。
WinXP SP2
Excel2000 SP3
の組み合わせでは正常に終了しますが。
参考までに。
Win2000SP4
Excel2000
でも正常に終了しました。
実行した時にExcelは閉じていますか?
プロセスに残っている?
>xlsBook.Close True
明示的にSaveAsを使用してExcelファイルを保存し、
xlsBook.Close False にしてファイルを閉じてみては
いかがでしょうか
> Dim xlsApp As Excel.Application
> Dim xlsBook As Excel.Workbook
参照設定を外した上で、上記を「As Object」に変更してみてください。
それでコンパイルエラーになる場所があれば、その部分に原因がある
可能性があります。
参照設定を外してもコンパイルが通るにも関わらず、プロセスが
正しく終了しないようであれば、Excel側のスタートアップや
アドイン等についても疑ってみた方がよいでしょう。
皆様、ご回答ありがとうございました。
m 様
> 実行した時にExcelは閉じていますか?
> プロセスに残っている?
xlsApp.QuitでExcelは閉じています。が、
「EXCEL.EXE」プロセスが残ってしまいます。
シロクロ 様
> 明示的にSaveAsを使用してExcelファイルを保存し、
> xlsBook.Close False にしてファイルを閉じてみてはいかがでしょうか
現象は改善されませんでした。
魔界の仮面弁士 様
> 参照設定を外した上で、上記を「As Object」に変更してみてください。
> それでコンパイルエラーになる場所があれば、その部分に原因がある
> 可能性があります。
コンパイルエラーは発生しませんでしたが、現象は改善されませんでした。
> Excel側のスタートアップや
> アドイン等についても疑ってみた方がよいでしょう。
申し訳ありませんが、アドイン等を疑うとは、
具体的に、どのような調査を行うと良いのでしょうか?
引き続き、ご教授の程、宜しくお願い致します。
> 申し訳ありませんが、アドイン等を疑うとは、
> 具体的に、どのような調査を行うと良いのでしょうか?
特定のファイル、(今回は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 状態も確認してみてください。
通りすがりの者です。
私も同じ現象で困っていました。
'*** 一旦表示させる(この記述がないとプロセスが残ってしまう)
xlApp.Visible = True
xlApp.Quit() 'Excelを閉じる
魔界の仮面弁士さんの「取得後の .Visible 状態も確認してみてください」の言葉を読み、
上記のように、Quitの前の行でVisibleをTrueにすることで解決しました。
どうもありがとうございました。
ツイート | ![]() |