和風スパゲティのレシピ

日本語でコーディングするExcelVBA

Folderオブジェクト(FileSystemObject)

FileSystemObjectの参照下で使用できるようになる、
Folderオブジェクトの取得方法とプロパティ・メンバー一覧を記載します。


※ FileSystemObjectについての解説はこちらからどうぞ

www.limecode.jp

Folderオブジェクトの取得方法

Folderオブジェクトを取得する方法は以下の2つです。

FolderSystemObject.GetFolderメソッド

Dim フォルダ As Folder
Set フォルダ = FSO.GetFolder(対象フォルダのパス)

Folderオブジェクト.SubFoldersプロパティ(の各Item)

Dim 親フォルダ As Folder
Set 親フォルダ = FSO.GetFolder(対象フォルダのパス)

Dim 子フォルダ As Folder
For Each 子フォルダ In 親フォルダ.SubFolders

Next

 

Foldersコレクションから各フォルダを取得するのはほぼForEach文で行うと思いますが、フォルダ名を指定すればItemプロパティでも取得が可能です。

Dim 親フォルダ As Folder
Set 親フォルダ = FSO.GetFolder(対象フォルダのパス)

Dim 子フォルダ As Folder
Set 子フォルダ = 親フォルダ.SubFolders.Item(フォルダ名)
' または
Set フォルダ = 親フォルダ.SubFolders(フォルダ名) ' Itemは省略可

 
ただし、指定できるのはKey = フォルダ名だけであり、
WorksheetsのようにIndexで指定することはできません。

Set フォルダ = 親フォルダ.Folders(1) ' ⇐ これはエラー

 

Folderオブジェクトのメンバー一覧

メソッド一覧

メソッド 処理内容
Copy フォルダをコピー
Delete フォルダを削除
Move フォルダを移動
CreateTextFile テキストファイルを作成してそのTextStreamを取得

Copy/Delete/Moveはすべて中身のファイル・フォルダごと実行されます。
 

Copy(フォルダをコピー)
フォルダ.Copy 行先のパス, [上書きするか_省略時はTrue=する]

行先のパスは

  • 「~~\」ならそのフォルダの中に同名でコピー
  • 「~~\フォルダ名」ならコピーして別名にリネーム

 

Delete(フォルダを削除)
フォルダ.Delete [読取専用フォルダも消すか(省略時はFalse=しない)]

 

Move(フォルダを移動)
フォルダ.Move 行先のパス

行先のパスは

  • 「~~\」ならそのフォルダの中に同名でコピー
  • 「~~\フォルダ名」なら移動して別名にリネーム

・同名フォルダの上書きは不可(エラー)
・別のドライブへの移動は不可(エラー)
 

CreateTextFile(テキストファイルを作成してそのTextStreamを取得)
Dim 編集するテキスト As TextStream
Set 編集するテキスト = フォルダ.CreateTextFile(作成ファイル名, [上書きするか_省略時はTrue], [True:Unicode/False:ASCII_省略時はFalse])

 

プロパティ一覧

プロパティ 取得 設定
Files 中身のファイルコレクション Files
SubFolders 中身のフォルダコレクション Folders
ParentFolder 親フォルダオブジェクト Folder
Drive 親ドライブオブジェクト Drive
Attributes フォルダの属性 Long ※1
DateCreated 作成日時 Date
DateLastAccessed アクセス日時 Date
DateLastModified 更新日時 Date
IsRootFolder 最上位フォルダか判定 Boolean
Name フォルダ名 String
Path [規定]フォルダパス String
Size サイズ Long ※2
Type 種類 ※3 String
ShortName 8.3形式名(古い) String
ShortPath 8.3形式パス(古い) String

※1 : 正確には列挙型vbFileAttribute。(Dir関数の引数に渡すのと同じもの)
※2 : バイト数を整数値で返す。型はVariantだが事実上Long。
※3 :「ファイル フォルダー」しか返りません。


すべて引数はありませんので、

Dim 作成日時 As Date
作成日時 = フォルダ.DateCreated

このようなコードで各値を取得してください。


既定のプロパティはPathですので、

Dim フォルダパス As String
フォルダパス = フォルダ

でパスを取得できますが、見てわかる通りかなり紛らわしいです。
よってプロパティ名の省略はおすすめしません。


設定も行えるのは「名称」と「属性」の2つです。

' フォルダ名の変更
フォルダ.Name = 変更するフォルダ名

' フォルダを隠しフォルダにする
フォルダ.Attributes = Directory + Hidden

 



以上がFolderオブジェクトの取得方法とプロパティ・メンバー一覧です。

その他FileSystemObjectの解説ついてはこちらを参照ください。
www.limecode.jp