このHPでは大変お世話になっております。
下記のアドレスに
『WebBrowser コントロールの Navigate メソッドによるメモリリーク』
とあります。
http://support.microsoft.com/default.aspx?scid=kb;ja;418376
この解決方法として
『WebBrowser コントロールを利用しているアプリケーションを
定期的に終了させて下さい。』
とありました。
多分、上記の理由からだと思うのですが、
WebBrowserからExcelファイルを開いた後、プログラムを終了しても
そのファイルを掴んだまま開放されません。
これはどう記述すれば開いているExcelファイルを開放できるのでしょうか。
初歩的な質問で申し訳ございませんが、
よろしくお願い致します。
http://support.microsoft.com/default.aspx?scid=kb;ja;304643
oDocument = Nothing
でダメだったってこと?
Set oDocument = Nothingを行っても
タスクマネージャーのプロセスタブをみると
EXCEL.EXEやWINWORD.EXEはプロセスとして残ったままです。
最終的にプログラムを終了させるとWINWORD.EXEのプロセス
はなくなります。
なぜかEXCEL.EXEはプログラムを終了しても残ってしまいます。
上記の『アプリケーションを定期的に終了させて下さい。』は
こういうことではないのですか?
Microsoftの言うアプリケーションを終了させるの意味が
よくわからなかったのです。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B243058
ここのサンプルでテストを行ったのですが、
やはり同じ現象がおきます。
①EXCELファイルを選択する。(WebBrowserに表示されます。)
②①とは違うファイルを選択する。(WebBrowserに表示されます。)
③プログラムを終了します。
EXCEL.EXEのプロセスが終了されずに残ります。
1ファイルだけ開いてプログラムを終了させた場合は
EXCEL.EXEのプロセスはちゃんと終了します。
これはどのような対処をすれば
必ずプロセスを終了させる事ができるのでしょうか。
Excel の開放処理については過去ログ検索でいくつか出てきます。
(キーワード『開放』など)
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200403/04030102.txt
↑の魔界の仮面弁士さんの書込み内でのリンク先など参考にされては
どうでしょう?
ありがとうございます。
上記の内容で調べてみます。
また書き込み致します。
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のタスクが違うファイルを開くたびに
増えてしまいます。
知識が乏しく実現方法がわかりません。
上記の場合、どう、修正すればよいのでしょうか。
ん〜、解答ではないんだが。
オブジェクトへの参照を消したところで、オブジェクトが消えるとは限らないんじゃないか?
ActiveX EXEのオブジェクトの場合は、
外からのオブジェクトへの参照が全て消えても、場合によっては終了しないことがあります。
きちんと終了させてから参照を消しましょう