こんにちは、blueです。
前回はFileSystemObject(FSO)内のオブジェクトを実際に取得してみました。
前回の記事はこちら
今回は取得したオブジェクトに対するプロパティを確認します。
FSOが使えるようになるとファイルの名前変更やコピー、移動などエクスプローラー上で行う操作はすべて可能になります。
難しそうに見えるかもしれませんがおおよその手順は決まっています。
大事な個所を絞って説明していきますのですべて読んでいただければきっと使えるようになります。
Excel内でのVBA操作から一歩踏み出て外の機能が使えるようになっていきましょう。
FSOを使用する手順
FSOを使用してファイル(フォルダ)を操作する手順は以下のようになります。
なおここでいうファイルやフォルダの操作はファイルを開くとか保存するとかなどExcel内で操作できる内容ではなく、ファイルにアクセスして操作する手順になります。
- 対象となるファイルあるいはフォルダパスを取得する
- 対象のファイル、フォルダパスに対するオブジェクトを取得する
- オブジェクトに対してメソッドやプロパティを使用する
今回は3のオブジェクトのプロパティについて説明します。
Folderオブジェクトのプロパティ
フォルダオブジェクトのプロパティとしては以下のようなものがあります。
プロパティ | オブジェクト | 説明 |
Attributes | フォルダの属性 | |
DateCreated | フォルダが作成された日時 | |
DateLastAccessed | フォルダが最後にアクセスされた日時 | |
DateLastModified | フォルダが最後に修正された日時 | |
Drive | 〇 | フォルダのドライブのオブジェクト |
Files | 〇 | フォルダのファイルズコレクション |
Name | フォルダの名前 | |
ParentFolder | 〇 | フォルダの親フォルダのオブジェクト |
Path | フォルダのフルパス | |
Size | フォルダのサイズ | |
SubFolders | 〇 | フォルダのサブフォルダのコレクション |
ただこれだけだとわかりにくいので実際のエクスプローラーの画面で説明します。
以下の「子フォルダ1」に対する情報を取得することとします。
以下は「子フォルダ1」のプロパティとFolderオブジェクトのプロパティの関係になります。
また以下はエクスプローラーで確認できる「子フォルダ1」と上下階層の関係になります。こちらはオブジェクト取得になります。
このように日々操作しているフォルダに関する情報が上下階層含めて取得できるようになります。
実際のコードは以下になります。
(長いですが今回追加したコードはDebug.Print以下のみです。
前回取得したオブジェクトに対してプロパティをセットしてイミディエイトウィンドウに表示させています)
Private Sub FolderProperty()
Dim FSO As Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim FD As FileDialog
Dim FolderName As String
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
If FD.Show = True Then
FolderName = FD.SelectedItems(1)
Else
Exit Sub
End If
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.getFolder(FolderName)
Debug.Print "Attributes:" & objFolder.Attributes
Debug.Print "DateCreated:" & objFolder.DateCreated
Debug.Print "DateLastAccessed:" & objFolder.DateLastAccessed
Debug.Print "DateLastModified:" & objFolder.DateLastModified
Debug.Print "Drive.Path:" & objFolder.Drive.Path
Debug.Print "Files.Count: " & objFolder.Files.Count
Debug.Print "Name:" & objFolder.Name
Debug.Print "ParentFolder.Path" & objFolder.ParentFolder
Debug.Print "Path:" & objFolder.Path
Debug.Print "Size:" & objFolder.Size
Debug.Print "SubFolders.Count:" & objFolder.SubFolders.Count
Debug.Print "Type:" & objFolder.Type
End Sub
ちなみにDebug.Printの表示結果は以下です
先ほどのobjFolderに対する情報が取れていることがわかります。
なおこの中のFilesやSubFoldersといったプロパティは今後FSOを扱う上で非常に強力なものですので覚えておいてください。
Fileオブジェクトのプロパティ
ファイルオブジェクトのプロパティとしては以下のようなものがあります。
プロパティ | オブジェクト | 説明 |
Attributes | ファイルの属性 | |
DateCreated | ファイルが作成された日時 | |
DateLastAccessed | ファイルが最後にアクセスされた日時 | |
DateLastModified | ファイルが最後に修正された日時 | |
Drive | 〇 | ファイルのドライブのオブジェクト |
Name | ファイルの名前 | |
ParentFolder | 〇 | ファイルの親フォルダのオブジェクト |
Path | フォルダのフルパス | |
Size | フォルダのサイズ |
こちらも エクスプローラーの画面で説明すると以下になります。
以下の「子ファイル1.xlsx」に対する情報を取得することとします。
以下は「子ファイル1.xlsx」のプロパティとFileオブジェクトのプロパティの関係になります。
以下はエクスプローラーで確認できる「子ファイル1.xlsx」と上階層の関係になります。こちらはオブジェクト取得になります。
フォルダオブジェクトとの違いはSubFoldersやFilesのような下の階層がない事くらいです。
同様に実際のコードは以下になります。
Private Sub FileProperty()
Dim FSO As Scripting.FileSystemObject
Dim objFile As Scripting.File
Dim FD As FileDialog
Dim FileName As String
Set FD = Application.FileDialog(msoFileDialogFilePicker)
If FD.Show = True Then
FileName = FD.SelectedItems(1)
Else
Exit Sub
End If
Set FSO = New Scripting.FileSystemObject
Set objFile = FSO.getFile(FileName)
Debug.Print "Attributes:" & objFile.Attributes
Debug.Print "DateCreated:" & objFile.DateCreated
Debug.Print "DateLastAccessed:" & objFile.DateLastAccessed
Debug.Print "DateLastModified:" & objFile.DateLastModified
Debug.Print "Drive.Path:" & objFile.Drive.Path
Debug.Print "Name:" & objFile.Name
Debug.Print "ParentFolder.Path" & objFile.ParentFolder.Path
Debug.Print "Path:" & objFile.Path
Debug.Print "Size:" & objFile.Size
Debug.Print "Type:" & objFile.Type
End Sub
同様にDebug.Printの表示結果は以下になります。
同様にファイルの情報を取得することができました。
Foldersコレクションのプロパティ
前回と今回で取得したオブジェクトは単一のFileやFolderになりますが今後はFolderやFileの集まりであるFoldersコレクションやFilesコレクションを扱っていくことになります。
その為ここで説明しておきます。
Foldersコレクションのプロパティは以下になります。
プロパティ | オブジェクト | 説明 |
Count | Foldersコレクションに含まれるフォルダの数 | |
Item | 〇 | Foldersコレクションに含まれる一つ一つのフォルダのオブジェクト なお引数に使用できるのはKey=フォルダ名でインデックス番号は使えない |
数は少ないですが多くのフォルダを扱う際にはコレクションとともに使用します。
Filesコレクションのプロパティ
同様にFilesコレクションのプロパティは以下になります。
プロパティ | オブジェクト | 説明 |
Count | Filesコレクションに含まれるファイルの数 | |
Item | 〇 | Filesコレクションに含まれる一つ一つのファイルのオブジェクト なお引数に使用できるのはKey=ファイル名でインデックス番号は使えない |
Foldersコレクションと同様に多くのファイルを扱う際にはコレクションとともに使用します。
参考)
フォルダやファイルにあるAttributes(属性)プロパティの値については以下のDocsを参考ください。
値は足し合わせで決定されるので合わなければ他の定数が含まれていないか確認ください。
まとめ
今回はFSOで取得したオブジェクトに関するプロパティについて説明しました。
FSOを宣言、使用するだけでこれだけ多くのプロパティ=情報を扱うことができるようになります。
ぜひ自分のファイル、フォルダで試してみてもらえると幸いです。
次回はアクションに関するメソッドについて説明します。
コメント