プロが教えるわが家の防犯対策術!

 数個前のスレッドで勘違いして,締め切らせていただきました.
申し訳ございません.未解決で同じ質問をさせてください.

 コードの流れといたしましては,
 エクセル操作
 ↓
 エクセル解放
 ↓  ←下記2行のコードが無ければ,この時点でExcel.exeは消えています.
 MsgBox("終了") 
 ↓
 アプリケーションを右上の×マークから終了(下記2行のコードを入れると,Excel.exeがギリギリまで残っております.)
     
Dim xlApp As New Excel.Application
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
Dim WB As Excel.Workbook
Dim xlSheets As Excel.Worksheets
Dim xlSheet As Excel.Worksheet
Dim Mypath As String = TextBoxパス.Text
Dim FName As String

FName = Dir(Mypath & "*.xls", vbNormal)
Do While FName <> ""
  WB = xlBooks.Open(Mypath & FName)
  For Each xlSheet In WB.Worksheets
  Next
 ' ↑の2行がなくなれば無事解放できます

  WB.Save() : WB.Close()
  MRComObject(WB)
  FName = Dir()
Loop

Me.Activate()
MRComObject(xlSheet) : xlSheet = Nothing
MRComObject(xlSheets) : xlSheets = Nothing
WB = Nothing
MRComObject(xlBooks) : xlBooks = Nothing
xlApp.Quit() : MRComObject(xlApp) : xlApp = Nothing
MsgBox("終了")

 先ほどのスレッドでアドバイス・指摘していただいた部分とあわせて
色々試してみましたが,自分では怪しそうな個所を見つけることすらできません...
暗黙宣言やNothing,Quit等ネットで見かけるものは一通り試したつもりなのですが...
 もしお詳しい方がいらっしゃれば,些細なことでも結構ですので
なんでもアドバイスいただければ非常にうれしいです.
 どうぞよろしくお願いいたします.

A 回答 (1件)

先の質問時の回答に


WorkSheetsコレクションと WorkSheetオブジェクトを暗黙にならないように取得/開放をするようにといわれたのではないですか?

WB.WorkSheets を xlSheetsに変更してみてはいかがですか

xlSheets = WB.Worksheets
For Each xlSheet In Xlsheets
  ' Sheetに対するアクション
  ' 不要になったxlSheetをここで開放
  MRComObject(xlSheet) : xlSheet = Nothing
Next
' 不要になったSheetsコレクションを開放
MRComObject(xlSheets) : xlSheets = Nothing

といった具合にして見ましょう
不要になった時点で開放するように心がけましょう
    • good
    • 0
この回答へのお礼

 redfox63 様

 どうもありがとうございます.
解決いたしました.非常に嬉しいです.

 アドバイスいただいた後,xlSheets = WB.Worksheetsで実行エラーが出るので
悩んでおりましたが,Dim xlSheets As Excel.Worksheets を
Dim xlSheets As Excel.Sheets としてなおりました.

 ~.Worksheetsの暗黙参照につきましてはGoogleで「"For Each xlSheet In" 」と検索すると
何故かそれに続いて ~.Worksheetsというコードばかりひっかかるので,問題ないのだと思い込んでおりました.
 また「「.」が2つ以上はダメ」とバカノヒトツオボエで, WB.Worksheets.Count → WB.Worksheetsというように,
「.」を1つにしたことでこの行についてはOKなのかと...


 最近ちょうどMRComObject(~)の配置位置についても,本来ループの中に
入れるべきコードなのではないかと自分なりに疑問を感じておりましたが,
それについても併せてご回答いただけたので非常に嬉しいです.

 今から,これまでに作ったコードをすべて見直してみます.
本当にどうもありがとうございました.

お礼日時:2009/05/24 20:43

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