ファイルシステムオブジェクト(FileSystemObject)の使い方
2016/12/10
ファイルシステムオブジェクト(FileSystemObject)
FileSystemObject(FSO)を利用するとファイル、フォルダ、ドライブの様々な操作を行うことができます。
FileSystemObject(FSO)を利用するには、Microsoft Scripting Runtime を参照設定するか、CreateObject 関数 を使用します。
なお、FileSystemObject の場合、使用後の解放( Set FSO = Nothing とか)は不要のようです(たぶん)。つけている方もいらっしゃるので、気になる方はつけてください。
FileSystemObject(FSO)を利用する1
Microsoft Scripting Runtime を参照設定します。
- VBE(Visual Basic Editor) を起動し、[ツール] – [参照設定] をクリックします。
- 「参照設定」ダイアログボックスが表示されるので、スクロールバーを動かし、「Microsoft Scripting Runtime」を表示し、チェックマークを付けて、「OK」ボタンをクリックします。
<FileSystemObject のインスタンス生成>
Dim fso As New FileSystemObject
引数・戻り値
- fso ・・・ 任意の名前( FileSystemObject オブジェクト の変数名)を指定します。
FileSystemObject(FSO)を利用する2
参照設定を行わず、CreateObject 関数を使って、FileSystemObject(FSO) を利用します。
ただし、この方法の場合、参照設定を行った場合と比べて実行速度が遅くなります。また、VBE(Visual Basic Editor)の入力支援機能を使用することはできません。
<FileSystemObject のインスタンス生成>
Dim fso [ As Object ]
Set fso = CreateObject(“Scripting.FileSystemObject”)
引数・戻り値
- fso ・・・ 任意の名前( FileSystemObject オブジェクト の変数名)を指定します。
FSO 使用例
サンプルVBAソース 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub Sample01_FSO() 'ファイルが存在するかどうかを確認する Dim FSO As New FileSystemObject Dim FileName As String FileName = "C:\Documents\memo01.txt" If FSO.FileExists(FileName) Then MsgBox FileName & " は存在します" Else MsgBox FileName & " は存在しません" End If End Sub |
実行結果 1
サンプルVBAソース 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Sub Sample02_FSO() '指定したフォルダー内のすべてのファイルの名前を取得する Dim FSO As Object Dim TargetFolder As Object Dim myFiles As Object Dim myFile As Object Dim strFiles As String Set FSO = CreateObject("Scripting.FileSystemObject") Set TargetFolder = FSO.GetFolder("C:\Documents\data") Set myFiles = TargetFolder.Files If myFiles.Count = 0 Then MsgBox "ファイルは見つかりませんでした" Exit Sub End If For Each myFile In myFiles strFiles = strFiles & myFile.Name & vbCrLf Next MsgBox strFiles End Sub |
実行結果 2
関連記事
-
FileSystemObject:ファイルやフォルダの親フォルダを調べる(ParentFolder プロパティ)
指定したファイルやフォルダの親フォルダを調べる(ParentFolder プロパ …
-
FileSystemObject:ファイル・フォルダを削除する(DeleteFile メソッド,DeleteFolder メソッド)
ファイルを削除する(DeleteFile メソッド) FileSystemObj …
-
FileSystemObject:ファイルやフォルダのサイズを取得(Size プロパティ)
ファイルやフォルダのサイズを取得(Size プロパティ) FileSystemO …
-
FileSystemObject:ファイルを開く(OpenAsTextStream メソッド)
ファイルを開く(OpenAsTextStream メソッド) 指定されたファイル …
-
FileSystemObject:ルートフォルダかどうかを調べる(IsRootFolder プロパティ)
ルートフォルダかどうかを調べる(IsRootFolder プロパティ) File …
-
FileSystemObject:フォルダ内のすべてのファイルを取得(Files プロパティ)
フォルダ内のすべてのファイルを取得(Files プロパティ) フォルダ内のすべて …
-
FileSystemObject:フォルダやファイルの種類を調べる(Type プロパティ)
フォルダやファイルの種類を取得(Type プロパティ) FileSystemOb …
-
TextStream ファイルを読み込む(Read,ReadLine,ReadAll)
ReadAll メソッド TextStream ファイルの内容全体を取得します。 …
-
FileSystemObject:Drive オブジェクトの主なプロパティ
Drive オブジェクトの取得 Drive オブジェクト を取得するには、FSO …
-
FileSystemObject:フォルダやファイルを削除(Delete メソッド)
フォルダやファイルを削除(Delete メソッド) FileSystemObje …
Comment
この「参照設定を行わない使用例」は動作しないのではないでしょうか
宣言の所で、ScriptingRuntime が参照設定になっていないためエラーで動作しないはずです
7・8・9行目の
As Folder
As Files
As File
の3つの所は「ScriptingRuntime」が必要なはずで
デバッグメニューからコンパイルをすると、ユーザー定義型は定義されていませんという
エラーになりましたので、参照設定を外さずに「CreateObject」に置き換えたのかと思われます
なので、参照設定を外していないのであればCreateObjectを使う必要性が薄いような気がいたします
※Officeのバージョン
Excel 2007, Access 2007
で確認
コメントありがとうございます。
7、8、9行目を修正しました。
修正前のコードでは、Scripting Runtime を参照設定せずに実行すると
「ユーザー定義型は定義されていません。」等のエラメッセージが表示され動作しません。
ご指摘ありがとうございました。
※ 7、8、9行目の修正前のコードは以下の通りです。
Dim TargetFolder As Folder
Dim myFiles As Files
Dim myFile As File