• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの開放)

エクセルのプロセス解放方法と解決策

このQ&Aのポイント
  • VB2008でエクセルを操作している際に、エクセルのプロセスが残ってしまう問題があります。
  • 特にワークシートを指定する場合や切り替える場合にプロセスが残ることがあります。
  • 解放するためにはMRComObject関数を使用してCOMオブジェクトへの参照を解放する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

裏で操作するExcelがメッセージボックスを出したままになっているのではないですか? obj.value = "Test" をコメントアウトしてもプロセスが残りますか? obj.value = "Test" などの処理が終了した後 xlApp.DisplayAlerts = false を実行してから xlApp.Quit を実行してみましょう > xlSheet = xlBook.Worksheets("Sheet2") > としてもプロセスが残ります。 これは残って当然でしょう Sheetsオブジェクトの開放が出来ません xlSheets = xlSheets("Sheet2") といった具合で取得できます > xlApp.Worksheets("Sheet2").Select() も Sheetsオブジェクトから選択するようにしましょう xlSheets("Sheet2").Select() といった具合で

sadokazu
質問者

お礼

いろいろテストを実施してみましたが、 Dim xlobj as Object Dim xlobj2 as Object xlobj = xlSheets("Sheet2") xlobj2 = xlobj.Range("C2") xlobj2.Value = "これはテスト" MRComObject(xlobj2) MRComObject(xlobj) とするとプロセスが正常に解放しました。 また xlobj = xlSheets("Sheet2") xlobj.Select() MRComObject(xlobj) として xlobj= xlApp.ActiveSheet xlobj2= xlobj.Range("C2") xlobj2.Value = "これはテスト" MRComObject(xlobj) MRComObject(xlobj2) でもシートが正常にきりかわりプロセスが終了しました。 VB6.0でこのあたりの解放が適当に記述しても開放することができたので、VB2008になってから解放処理が複雑になり理解にくるしんでおりました。 解放処理がかなりややこしいく、一回一回解放しないといけないので大変ですが、これで次のステップに進むことができます。 本当にありがとうございました。

sadokazu
質問者

補足

早々の回答ありがとうございます。 申し訳ありません サンプルプログラムに xlApp.DisplayAlerts = false が抜けていました。 シートの指定をしなければ特に問題はありません。 redfox63様のようにSheetsオブジェクトから試してみたのですが、 xlSheets = xlSheets("Sheet2") とするとエラーが発生してしまいます。 シートを指定しなければ特に問題はないのですが・・・。 現在作成しているプログラムではシートの切り替えが多数存在しますので、これを攻略できないと・・・・。 現在の環境はVB2008でエクセル2007です。 xlSheets("Sheet2").Select() xlobj = xlSheet.Range("A1:C3") xlobj.Value = "TEST" MRComObject(xlSheets) MRComObject(xlobj) この使い方は間違っているでしょうか?

関連するQ&A