タイトル : Re: Excelタスクの消えるタイミング 投稿日 : 2009/07/01(Wed) 09:46 投稿者 : 魔界の仮面弁士
> For Each ObjSht In xlBook.Worksheets > If ObjSht.Name = TgtShtName Then > RetShtName = ObjSht.Name > Exit For > End If > Next このコードの意図は、 「TgtShtName というシートが存在していれば、RetShtName に TgtShtName を代入する」 でしょうか? > 何か「For Each ObjSht In xlBook.Worksheets」〜「Set xlSheet = Nothing」間の > 記述で省略形など不適切な部分があるのでしょうか? おそらくは列挙子が原因だと思います。For Each 構文でループさせた場合、内部で _NewEnum メソッド/プロパティが呼び出されます(IEnumVARIANT)。このループ変数の スコープが、プロシージャ終了時まで保持されているのではないでしょうか。 http://www.vb-user.net/images/20090701/NewEnum.png なおこちらの環境では、下記にて Excel.exe が終了される事を確認しています。 (修正案1) For〜Next構文に変更する。 Dim n As Integer For n = 1 To xlBook.Worksheets.Count '☆ If xlBook.Worksheets(n).Name = TgtShtName Then RetShtName = xlBook.Worksheets(n).Name Exit For End If Next (修正案2) 列挙変数に対して、明示的に Nothing を Set する。 Dim V As Variant Set V = CVar(xlBook.Worksheets) For Each ObjSht In V If ObjSht.Name = TgtShtName Then RetShtName = ObjSht.Name Set ObjSht = Nothing '★ Exit For End If Next Set V = Nothing '★ |