- ベストアンサー
VBAでFileSystemObjectを宣言する際には「New」をつけるべきか
- VBAのFileSystemObjectを宣言する際には、newを付けるか付けないかで結果は変わりません。
- VBAのFileSystemObjectを宣言するには、Dim myFSO As New FileSystemObject または Dim myFSO As FileSystemObject のどちらを使用しても構いません。
- VBAのFileSystemObjectを使用してドライブの情報を取得したりファイル操作を行う際には、宣言の方法によって動作には差がありません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Dim myFSO As New FileSystemObject (Dim myFSO As FileSystemObject) の後で Set myFSO = CreateObject("Scripting.FileSystemObject") をやってるんだから、そりゃ結果は変わらないわなぁ... 結果的に、同じ事をやってるんだから。 CreateObjectとNewについて、もうちょっと勉強してみましょう。
その他の回答 (2)
- mitarashi
- ベストアンサー率59% (574/965)
Dim myFSO As New FileSystemObject としているという事は、Microsoft Scripting Runtimeに参照設定されているのでしょう。 一方、Set myFSO = CreateObject("Scripting.FileSystemObject")は、Microsoft Scripting Runtimeに参照設定しないときの使い方です。今回のコードでは、宣言部でNewを入れてあれば、この部分(Set myFSO = 云々)はコメントアウトしても動作します。 参照設定しているときは、 Dim myFSO As New FileSystemObject 単独 または、 Dim myFSO As FileSystemObject と、 Set myFSO = New FileSystemObjectを併用するのが本来です。 これは、#1さんも仰っている事ですね。 敢えてしゃしゃり出たのは、最近 Dim myFSO As New FileSystemObject の書き方で酷い目にあったからです。 #2さんの >このキーワードを指定すると、オブジェクトを暗黙的に作成できます。 >オブジェクト変数を宣言するときにキーワード New を指定した場合は、 >オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるので だけでは無くて、 コードの中でオブジェクトを削除してしまった時は、新たなインスタンスが作成されます。 当方誤って消してしまっていたのに、真っ新な新規インスタンスが生成されてしまっていて、バグに気がつくのにずいぶん時間がかかってしまいました。 Dim ... As New は、二度と使うまいと、心に誓ったのでした。 ご参考まで。
お礼
ありがとうございました。
- okormazd
- ベストアンサー率50% (1224/2412)
Excel ヘルプ 「Dim」から、 New 省略可能です。このキーワードを指定すると、オブジェクトを暗黙的に作成できます。オブジェクト変数を宣言するときにキーワード New を指定した場合は、オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるので、Set ステートメントを使ってオブジェクトへの参照を代入する必要はありません。キーワード New を使って、固有のデータ型の変数の宣言、または従属オブジェクトのインスタンスの宣言はできません。また、キーワード New は、キーワード WithEvents と共に使用できません。
お礼
ありがとうございました。
お礼
ありがとうございました。