投稿日 | : 2007/07/29(Sun) 13:01 |
投稿者 | : のぞみ |
Eメール | : |
URL | : |
タイトル | : Re^4: エクセルがタスクマネージャに残ってしまいます。 |
魔界の仮面弁士様、YK様おはようございます。
ちゅ〜かもうお昼回ってますね!!
> > For Each ObjSheet In xlBook.Worksheets
> > xlApp.Quit
> 子オブジェクトの列挙処理中に、親オブジェクトを終了させるのは避けましょう。
> 子オブジェクトをすべて使用し終わった後で終了させた方が無難です。
★xlApp.Quit・・・親オブジェクト
xlSheet・・・・子オブジェクト
xlBook・・・・子オブジェクトと解釈していますが、
この処理順番は本サイト「http://hanatyan.sakura.ne.jp/vbhlp/excelframe.htm」で
紹介されているものをそのままなのですがダメなのかな(ノ_`)
> > ちなみにSheetNumが5以下でForを抜けた場合は抜けた後に終了処理を記述していますので
> であれば、それらのコードも書いてくださいませ。
> 第三者が再現可能なソースコードを提示してもらわないと、検証のしようがないので。
★端折って簡潔に書かないとかなり多くなるのと、その処理「SheetNumが5以下」に行くまでに
プロセスに残ると言う事象が発生してるので最小限エリアで解決して行こうと思ったからです。
「http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?no=9803&reno=9801&oya=9799&mode=msgview&page=0」
やりたいことは、シート枚数が5以上あればファイル名前を変えて保存し、元々開いた
「working.xls」のシート名"Default"を残してシートを削除したいのです。
再現確認していただけるのなら、
宣言・working.xlsの準備等の事前準備はここでは省略させていただいて
Public Sub TargetFileOpen() 'ファイルオープン
DataPath = App.Path & "\data"
TargetFilePath = DataPath & "\working.xls"
DefaultSheetName = "Default"
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(TargetFilePath)
Set xlSheet = xlBook.Worksheets(DefaultSheetName)
Call SheetCheck
End Sub
【終了確認パーン1】
Public Sub SheetCheck() '【終了処理をFor処理の前置きの場合】・・・正常終了
'ファイルオープンして別のプロシージャーに入ったらすぐ終了して試してみる。
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing '←実行した時点で正常にEXCEL.EXE終了
For Each ObjSheet In xlBook.Worksheets
'処理
Next
End Sub
【終了確認パーン2】
Public Sub SheetCheck() '【終了処理をFor処理の後置きの場合】・・・NG
'ファイルオープンして別のプロシージャーのFor文に入ったらすぐ終了して試してみまる
For Each ObjSheet In xlBook.Worksheets
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing・・・この処理を実行してもプロセスにEXCEL.EXEが残ります
'処理
Next
End Sub
ここで分かったこと、「For Each ObjSheet In xlBook.Worksheets」が悪さをしてるのでは
ないかってことです。
> そうではなく、こういうことで。
> For I = 1 To xlBook.Worksheets.Count
> Set ObjSheet = xlBook.Worksheets(I)
> :
> :
> Next
★上のパターン2に於いて、ご教示していただいた「Each」を使わない
Forにしても結果はパターン2と同じでした
あまり文章が上手くなく誤解等ありますけどすみません。
それと初めに断るべきだったのでしょうが私、VB初心者ですm(_ _)m
ごめんなさい。