WebBrowserのアプリケーションの開放の仕方


ガンダマー  2004-07-08 18:09:50  No: 114655  IP: [192.*.*.*]

このHPでは大変お世話になっております。

下記のアドレスに
『WebBrowser コントロールの Navigate メソッドによるメモリリーク』
とあります。
http://support.microsoft.com/default.aspx?scid=kb;ja;418376
この解決方法として
『WebBrowser コントロールを利用しているアプリケーションを
定期的に終了させて下さい。』
とありました。
多分、上記の理由からだと思うのですが、
WebBrowserからExcelファイルを開いた後、プログラムを終了しても
そのファイルを掴んだまま開放されません。

これはどう記述すれば開いているExcelファイルを開放できるのでしょうか。
初歩的な質問で申し訳ございませんが、
よろしくお願い致します。

編集 削除
特攻隊長まるるう  2004-07-08 18:34:10  No: 114656  IP: [192.*.*.*]

http://support.microsoft.com/default.aspx?scid=kb;ja;304643

oDocument = Nothing
でダメだったってこと?

編集 削除
ガンダマー  2004-07-09 10:34:31  No: 114657  IP: [192.*.*.*]

Set oDocument = Nothingを行っても
タスクマネージャーのプロセスタブをみると
EXCEL.EXEやWINWORD.EXEはプロセスとして残ったままです。
最終的にプログラムを終了させるとWINWORD.EXEのプロセス
はなくなります。
なぜかEXCEL.EXEはプログラムを終了しても残ってしまいます。
上記の『アプリケーションを定期的に終了させて下さい。』は
こういうことではないのですか?
Microsoftの言うアプリケーションを終了させるの意味が
よくわからなかったのです。

編集 削除
ガンダマー  2004-07-14 19:14:37  No: 114658  IP: [192.*.*.*]

http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B243058

ここのサンプルでテストを行ったのですが、
やはり同じ現象がおきます。

①EXCELファイルを選択する。(WebBrowserに表示されます。)
②①とは違うファイルを選択する。(WebBrowserに表示されます。)
③プログラムを終了します。

EXCEL.EXEのプロセスが終了されずに残ります。
1ファイルだけ開いてプログラムを終了させた場合は
EXCEL.EXEのプロセスはちゃんと終了します。
これはどのような対処をすれば
必ずプロセスを終了させる事ができるのでしょうか。

編集 削除
特攻隊長まるるう  2004-07-15 09:17:56  No: 114659  IP: [192.*.*.*]

Excel の開放処理については過去ログ検索でいくつか出てきます。
(キーワード『開放』など)
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200403/04030102.txt
↑の魔界の仮面弁士さんの書込み内でのリンク先など参考にされては
どうでしょう?

編集 削除
ガンダマー  2004-07-15 13:32:02  No: 114660  IP: [192.*.*.*]

ありがとうございます。
上記の内容で調べてみます。
また書き込み致します。

編集 削除
ガンダマー  2004-07-15 19:49:56  No: 114661  IP: [192.*.*.*]

Option Explicit

Dim oDocument As Object
Dim objApp    As Excel.Application
Dim objExl    As Excel.Workbook

Private Sub Command1_Click()
Dim sFileName As String

    ' 「ファイルを開く」
    With CommonDialog1
        .FileName = ""
        .ShowOpen
        sFileName = .FileName
    End With

    ' ファイルが選択されたら
    If Len(sFileName) Then
        Set oDocument = Nothing
        'Set objExl = Nothing
        'Set objApp = Nothing

        Set objApp = CreateObject("Excel.Application")
        Set objExl = objApp.Workbooks.Open(sFileName)
        WebBrowser1.Navigate sFileName
    End If
    
End Sub

Private Sub Form_Load()
Command1.Caption = "Browse"
    With CommonDialog1
        .Filter = "Office ドキュメント " & _
        "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
        .FilterIndex = 1
        .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    
    Set objExl = Nothing
    Set objApp = Nothing
    Set oDocument = Nothing
    
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _
URL As Variant)
    On Error Resume Next
    
    Set oDocument = pDisp.Document
    MsgBox "File opened by: " & oDocument.Application.Name

End Sub

上記のアドレスを参考にしましたがうまく開放できません。
WebBrowserがEXCELを開く前に自分で指定したEXCELオブジェクトで
開くよう設定しました。が、頭の中で消化できず思うようにいきません。

失礼かと思いましたがどのようにEXCELを開放すればよいか
解らなかったためテストソースを全て貼り付けました。
上記のままではEXELのタスクが違うファイルを開くたびに
増えてしまいます。
知識が乏しく実現方法がわかりません。
上記の場合、どう、修正すればよいのでしょうか。

編集 削除
Ohen  2004-07-15 23:40:26  No: 114662  IP: [192.*.*.*]

ん〜、解答ではないんだが。
オブジェクトへの参照を消したところで、オブジェクトが消えるとは限らないんじゃないか?

編集 削除
ひろ  2006-05-30 13:08:20  No: 114663  IP: [192.*.*.*]

ActiveX EXEのオブジェクトの場合は、
外からのオブジェクトへの参照が全て消えても、場合によっては終了しないことがあります。
きちんと終了させてから参照を消しましょう

編集 削除