VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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
ごめんなさい。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -