こんにちは、blueです。
前回はFileSystemObject(FSO)を実際に覗いてみました。
前回の記事はこちら
今回からはFSO内のオブジェクトを取得する方法について説明します。
FSOが使えるようになるとファイルの名前変更やコピー、移動などエクスプローラー上で行う操作はすべて可能になります。
難しそうに見えるかもしれませんがおおよその手順は決まっています。
大事な個所を絞って説明していきますのですべて読んでいただければきっと使えるようになります。
Excel内でのVBA操作から一歩踏み出て外の機能が使えるようになっていきましょう。
FSOを使用する手順
FSOを使用してファイル(フォルダ)を操作する手順は以下のようになります。
なおここでいうファイルやフォルダの操作はファイルを開くとか保存するとかなどExcel内で操作できる内容ではなく、ファイルにアクセスして操作する手順になります。
- 対象となるファイルあるいはフォルダパスを取得する
- 対象のファイル、フォルダパスに対するオブジェクトを取得する
- オブジェクトに対してメソッドやプロパティを使用する
今回は2についての続きを説明します。
オブジェクトを取得する前に
前回FSOによってすべてのファイル情報を取得しました。
今回は特定のオブジェクトを直接的に取得していきます。
ただ最初はオブジェクトを宣言する必要がある為、まずは各種オブジェクトとオブジェクトの宣言方法について説明します。
各種オブジェクト
ファイルシステムを扱うScriptingライブラリに存在する代表的なオブジェクト(コレクション)は以下になります。
オブジェクト | 内容 |
FileSystemObject | ファイルシステムを扱うための最上位のオブジェクト。以下を利用するためにまずはこれを宣言する |
Drives | ローカルPCに存在するすべてのDrive(C: D:)の集まり(コレクション) |
Drive | ローカルPCに存在する一つのDriveオブジェクト |
Folders | Folderオブジェクトの集まり(コレクション) |
Folder | 一つのFolderオブジェクト |
Files | Fileオブジェクトの集まり(コレクション) |
File | 一つのFileオブジェクト |
TextStream | 一つのテキストファイルオブジェクト |
なおFileSystemObject以下を具体的に図に表すと以下のようになります(青字はコレクション)。
それぞれのコレクションの中にオブジェクトが存在する形です。
これらの中から必要なオブジェクトを宣言していきます。
オブジェクトの宣言
オブジェクトの具体的な宣言方法は以下になります。
Dim FSO As Scripting.FileSystemObject
Dim objDrive As Scripting.Drive
Dim objFolders As Scripting.Folders
Dim objFolder As Scripting.Folder
Dim objFile As Scripting.Files
Dim objFile As Scripting.File
Dim objTxt As Scripting.TextStream
上記の階層構造の中から欲しいオブジェクトをまずは宣言します。
なおFSOは必須です。以降のオブジェクトはFSOを基に取得します。
参考)これらのオブジェクトはScripting Runtimeの参照設定をOnにしておくとデータ型を記述する際に自動で表示されます(Scripting.と記載しないと表示されないので注意ください)
オブジェクトの取得
では準備も整ったので、目的(あるいは起点となるオブジェクト)を取得します。
オブジェクトを取得するメソッドは以下の3つがメインです。
- FSO.GetDriveメソッド…指定したパスに対応するDriveオブジェクトを返します
- FSO.GetFileメソッド…指定したパスに対応するFileオブジェクトを返します
- GetFolderメソッド…指定したパスに対応するFolderオブジェクトを返します
Docsはこちら
具体的なコードは以下です。
長く見えますが最初のほうは1回目で説明したファイル(フォルダ)をユーザーに選択させるコードです。
第一回目の記事はこちら
GetFileメソッド(最後にファイルを開いています)
Private Sub getFile()
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)
Workbooks.Open objFile.Path
End Sub
GetFolderメソッド(最後にイミディエイトウィンドウにパスを表示させています)
Private Sub getFolder()
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 objFolder.Path
End Sub
オブジェクトを取得する為に第一回目で取得したフルパスを使用しています。
これで目的のオブジェクトが取得できました。
まとめ
今回はFSOでのファイル(フォルダ)の取得方法について説明しました。
ここまで取得できれば以降はプロパティやメソッドで色々なことが可能になります。
次回はFileオブジェクトやFolderオブジェクトの各種プロパティを説明します。
コメント