今回は、FileSystemObjectのFolderオブジェクトを取得する方法をご紹介します。
Folderオブジェクトは、フォルダを操作するために必要なオブジェクトなので、使用する頻度は多いかと思います。
本記事では、サンプルコードを用いてコピペで使える実践的なコードもご紹介します。
- Fileオブジェクトを取得する 3つのパターンが分かります。
- 取得における注意点、エラーの回避方法についても詳しく理解できます。
前提
FileSystemObjectの参照設定が必要
Folderオブジェクトを利用するには、FileSystemObjectの参照設定が必要です。
以下の記事では、FileSystemObjectの参照設定について解説しています。
関連メソッド/プロパティ
# | メソッド/プロパティ | 説明 |
---|---|---|
1 | GetFolder | フォルダパスを指定し、特定のFolderオブジェクトを取得する |
2 | SubFolders | フォルダ内にある、すべてのFolderオブジェクトを取得する |
3 | ParentFolder | ファイル・フォルダの親フォルダのFolderオブジェクトを取得する |
Folderオブジェクトの主なプロパティ
# | プロパティ | 説明 |
---|---|---|
1 | Attributes | フォルダの属性を取得、設定する |
2 | DateCreated | フォルダの作成日時を取得する |
3 | DateLastAccessed | 最後にアクセスされた日時を取得する |
4 | DateLastModified | 最後に更新された日時を取得する |
5 | Drive | フォルダが保存されているドライブ(Driveオブジェクト)を取得する |
6 | Files | フォルダ内のすべてのファイル(Fileオブジェクト)を取得する |
7 | IsRootFolder | ルートフォルダであるかを判定する |
8 | Name | フォルダ名を取得、設定する |
9 | ParentFolder | フォルダが保存されているフォルダ(Folderオブジェクト)を取得する |
10 | Path | フォルダパスを取得する |
11 | Size | フォルダ内のファイルおよびサブフォルダの合計容量を取得する |
12 | SubFolders | フォルダ内のすべてのフォルダ(Folderオブジェクト)を取得する |
基本情報
GetFolderメソッド
フォルダパスを指定し、特定のFolderオブジェクトを取得する場合、FileSystemObjectのGetFolderプロパティを使用します。
構文
FileSystemObject.GetFolder(FolderPath)
※緑色は引数です。
引数
# | 引数 | 必須/任意 | 説明 |
---|---|---|---|
1 | FolderPath | 必須 | Folderオブジェクトとして取得したいフォルダパスを指定 |
指定したフォルダが存在しない場合、エラーが発生します。
処理実行前に、フォルダの存在チェックを実施するようにしましょう。
フォルダの存在チェックについては、以下の記事で解説しています。
SubFoldersプロパティ
フォルダ内にある すべてのFolderオブジェクトを取得する場合、FolderオブジェクトのSubFoldersプロパティを使用します。
FolderObject.SubFolders
ParentFolderプロパティ
ファイル・フォルダの親フォルダのFolderオブジェクトを取得する場合、ParentFolderプロパティを使用します。
FileObject.ParentFolder
FolderObject.ParentFolder
親フォルダが無い場合(ルートディレクトリ直下のフォルダやファイル等)はエラーとなりますのでご注意ください。
Fileオブジェクトの取得方法については、以下の記事を参照ください。
サンプルコード
指定のフォルダ情報をセルに出力する
Public Sub getFolderInfo()
Dim fso As New FileSystemObject ' FSOインスタンス生成
Dim myFolder As Folder ' Folderオブジェクト
' Folderオブジェクトを取得
Set myFolder = fso.GetFolder("C:\vba-hack")
' セルにファイル情報を書き出し
Cells(1, 1).Value = myFolder.Name ' フォルダ名
Cells(1, 2).Value = myFolder.DateLastAccessed ' 更新日時
Cells(1, 3).Value = myFolder.Size ' フォルダサイズ
End Sub
指定のフォルダ配下のフォルダ情報をセルに出力する
Public Sub getFolderInfoForSubFolder()
Dim fso As New FileSystemObject ' FSOインスタンス生成
Dim myTargetFolder As Folder ' 対象Folderオブジェクト
Dim mySubFolder As Folder ' サブFolderオブジェクト
Dim loopCnt As Integer ' ループカウンタ
' 対象Folderオブジェクトを取得
Set myTargetFolder = fso.GetFolder("C:\vba-hack")
' サブFolderオブジェクトを取得し、その分ループ
loopCnt = 1
For Each mySubFolder In myTargetFolder.SubFolders
Cells(loopCnt, 1).Value = mySubFolder.Name ' フォルダ名
Cells(loopCnt, 2).Value = mySubFolder.DateLastAccessed ' 更新日時
Cells(loopCnt, 3).Value = mySubFolder.Size ' フォルダサイズ
loopCnt = loopCnt + 1
Next mySubFolder
End Sub
指定のフォルダの親フォルダ情報をセルに出力する
Public Sub getFolderInfoForParentFolder()
Dim fso As New FileSystemObject ' FSOインスタンス生成
Dim myTargetFolder As Folder ' 対象Folderオブジェクト
Dim myParentFolder As Folder ' 親Folderオブジェクト
' Folderオブジェクトを取得
Set myTargetFolder = fso.GetFolder("C:\vba-hack\vba")
' 親Folderオブジェクトを取得
Set myParentFolder = myTargetFolder.ParentFolder
' セルに親フォルダ情報を書き出し
Cells(1, 1).Value = myParentFolder.Name ' フォルダ名
Cells(1, 2).Value = myParentFolder.DateLastAccessed ' 更新日時
Cells(1, 3).Value = myParentFolder.Size ' フォルダサイズ
End Sub
上記の例では、「C:\vba-hack\vba」の親ディレクトリを取得しているので、「vba-hack」ディレクトリが取得できます。
指定のファイルの親フォルダ情報をセルに出力する
Public Sub getFolderInfoForFileParentFolder()
Dim fso As New FileSystemObject ' FSOインスタンス生成
Dim myTargetFile As File ' 対象Fileオブジェクト
Dim myParentFolder As Folder ' 親Folderオブジェクト
' Fileオブジェクトを取得
Set myTargetFile = fso.GetFile("C:\vba-hack\vba\TestParentFolder.txt")
' 親Folderオブジェクトを取得
Set myParentFolder = myTargetFile.ParentFolder
' セルに親フォルダ情報を書き出し
Cells(1, 1).Value = myParentFolder.Name ' フォルダ名
Cells(1, 2).Value = myParentFolder.DateLastAccessed ' 更新日時
Cells(1, 3).Value = myParentFolder.Size ' フォルダサイズ
End Sub
上記の例では、「C:\vba-hack\vba\TestParentFolder.txt」の親ディレクトリを取得しているので、「vba」ディレクトリが取得できます。
最後に
今回は、Folderオブジェクトを取得する方法をご紹介させて頂きました。
この記事が、皆さんのお力になれば幸いです!
コメント