tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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   '★

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

古いスレッドにレスはつけられません。