質問させていただきます.どうぞよろしくお願いします.

 vb2008で,エクセル操作をするアプリケーションの作成を試みております.
コードの流れとしましては,
 エクセル操作
  ↓
 オブジェクト・アプリケーション解放
  (自分的にはここでタスクマネージャからExcel.exeが
             消えると思うのですが,残ります)
  ↓
 メッセージボックス「終了」
  ↓
 アプリケーションを右上の×マークで閉じる
  (タスクマネージャからExcel.exeが消えます)

となります.
 色々なページを参考にさせていただいて,Excelが解放されるように
したつもりなのですが,VBアプリケーション終了ギリギリまで
存在し続けるという事は,うまく解放できていないということなのでしょうか?

 作成したコードは以下のようになります.
(バグ取り中に,エクセル操作部分のコードはほとんど消去してみました.
しかしまだ上記のような現象になっております)
Private Sub ButtonA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonA.Click
Dim N_e As Integer
Call Excel一括置換(N_e)
MsgBox("終了" )
End Sub


Private Sub Excel操作(ByRef N As Integer)
Dim xlApp As New Excel.Application
Dim xlBooks As Object
Dim WB As Object
Dim Rng As Object

'================== 終了処理 =====================
Rng = Nothing : MRComObject(Rng)
WB = Nothing : MRComObject(WB)
xlBooks = Nothing : MRComObject(xlBooks)
xlApp.Quit() : xlApp = Nothing : MRComObject(xlApp)
End Sub


Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)
If objCom Is Nothing Then
Return
End If
Try
If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
If force Then
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
Else
Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
Debug.WriteLine(count)
End If
End If
Finally
objCom = Nothing
End Try
End Sub

 何か些細なことでもご指摘いただければ非常に助かります.
どうぞよろしくお願いたします.

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Comオブジェクトの開放順が違うからでしょう



Comオブジェクトを Nothingにしてから開放しようとしてもVB.NETはどれを開放していいものやらわからないと思います

> Rng = Nothing : MRComObject(Rng)
> WB = Nothing : MRComObject(WB)
> xlBooks = Nothing : MRComObject(xlBooks)
> xlApp.Quit() : xlApp = Nothing : MRComObject(xlApp)

MRComObject(Rng) : Rng = Nothing
MRComObject(WB) : WB = Nothing
MRComObject(xlBooks) : xlBooks = Nothing
xlApp.Quit() : MRComObject(xlApp) : xlApp = Nothing
といった具合に 開放してから Nothingにしましょう

暗黙のオブジェクトを生まないように気おつけましょう
予算が許すなら Visual Studio Tools for Office(VSTO)なども検討してみましょう
    • good
    • 0
この回答へのお礼

redfox63様

ご指摘いただいた通りでございました.どうもありがとうございます.
アプリ終了と同時に解放できるので悩みましたが,やはり
解放できていなかったんですね.
 夜遅い時間にかかわらず閲覧・ご回答いただけたことに感謝いたします.
 どうもありがとうございました.

お礼日時:2009/05/24 08:48

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


人気Q&Aランキング

おすすめ情報