[リストへもどる]
一括表示

投稿時間:2003/05/28(Wed) 14:52
投稿者名:miya
Eメール:
URL :
タイトル:
FileSystemObjectについて

こちらで、「ファイル操作関係」の「FileSystemObject オブジェクトの使用例」を
見させてもらったのですが、

その中に、
「Nothing を使用しているのを見かけますが、これは必ずしも必要ありません。」
という記述があります。

例文の

Dim FsObj   As New FileSystemObject
Dim RetValue As Long
RetValue = FsObj.GetFolder("c:\windows").Files.Count
Label1.Caption = "ファイルは " & RetValue & " 個有りました。"

という部分を

Dim FsObj   As Object
Dim myFolder  As Object
Dim RetValue As Long

Set FsObj = CreateObject("Scripting.FileSystemObject")
Set myFolder = FsObj.GetFolder("c:\windows")
RetValue = myFolder.Files.Count
Label1.Caption = "ファイルは " & RetValue & " 個有りました。"

という記述に換えた場合も、Nothingは必要ないのでしょうか?
setしている場合は、Nothingを入れなくてはいけないのでしょうか?

ご教授ねがいます。

投稿時間:2003/05/28(Wed) 15:28
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Set XXX = Nothingの本当の意味
私の下手な解説より、下記で詳しく解説されているので
そちらを参考にして下さい。

 Set XXX = Nothingの本当の意味
http://www.gj.il24.net/~nakasima/vb/tech/Nothing/

投稿時間:2003/05/28(Wed) 16:21
投稿者名:miya
Eメール:
URL :
タイトル:
Re^2: Set XXX = Nothingの本当の意味
ありがとうございます。
早速読んでみました。

自分的に理解したつもりなのですが、
まちがっているかもしれないので、確認させてください。

1、先ほどの例文は2つとも、参照がなくなった(関数を抜けた)時点で
  インスタンスが削除されるため、Set XXX = Nothingの文はなくてもよい。
  (あっても、処理上は問題ない)

2、パブリックな変数等にインスタンスを作成した場合、
  プログラム終了時まで解放されないので、その場合は必要なくなった(参照がない)時点で、
  Set XXX = Nothing すれば、インスタンスが削除される。
  が、同じ変数に新たなインスタンスを作成すると、以前のインスタンスは参照されなくなって
  削除されるので、Set XXX = Nothingをしなくてもエラーにはならない。

と、いうことでしょうか?

投稿時間:2003/05/28(Wed) 16:30
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: Set XXX = Nothingの本当の意味
基本的にはそういう事だと思います。
但し、途中でエラーが発生したりすると解放されなかったりします。
又、ExcelやWordのようにうまく解放されないアプリもあります。
本来は必要がなくなった時点で解放してやる方がいいかと思います。

投稿時間:2003/05/28(Wed) 16:41
投稿者名:miya
Eメール:
URL :
タイトル:
Re^4: Set XXX = Nothingの本当の意味
普段あまり意識しないで
「セットしたらNothing」とやっていたので(だめですね)、
大変勉強になりました。

ありがとうございました。