CreateFolder について

ファイル出力を行う際に、フォルダを作る処理が必要になりました

そのため、CreateFolderメソッドについて調べてみます

MkDirメソッド同様に、親フォルダがない場合はエラーになってしまいますので、再帰的にフォルダを作成するサンプルなどを作成します

■CreateFolderメソッド

広告

フォルダを作成するメソッドですね

・構文

構文は以下の通りです

object.CreateFolder (foldername)

objectはFileSystemObjectのオブジェクトです

・パラメータ

メソッドのパラメータは以下の通りです

  • foldername … 作成するフォルダのパス

作成するフォルダのパスを設定しますが、最後の文字はフォルダの区切り文字でなくても、作成するフォルダを識別した文字列として処理されます

・戻り値

メソッドの戻り値は以下の通りです

  • 戻り値 … Folderオブジェクト

作成したフォルダのFolderオブジェクトを戻り値として返します

■例

・簡単なサンプル

①CreateFolderのサンプル

Sub CreateFolder_Sample(foldername As String, oFolder As Folder)

    Dim obj     As FileSystemObject
   
    ' オブジェクトを作成
    Set obj = New FileSystemObject
    
    ' CreateFolder
    Set folder = obj.CreateFolder(foldername)
    
    ' オブジェクトを破棄
    Set obj = Nothing
    
End Sub

②呼び出し元関数のサンプル

Sub CallCreateFolder_Sample()

    Dim foldername      As String
    Dim oFolder         As Folder
    
    ' CreateFolderファイルパス
    foldername = "E:\VBA\Sample003\Sample"
    
    ' 作成した関数を呼び出す
    Call CreateFolder_Sample(foldername, oFolder)

    Debug.Print oFolder.Name
    
    ' Folderオブジェクトを破棄
    Set oFolder = Nothing

End Sub

③簡略化したCreateFolderのサンプル

Sub CreateFolder_Sample2(ByVal foldername As String, ByRef oFolder As Folder)

    ' オブジェクトを作成
    With New FileSystemObject
        ' 作成したフォルダのFolderオブジェクトを返す
        Set oFolder = .CreateFolder(foldername)
    
    End With
    
End Sub
広告

・説明

サンプルはいつも通りのFileSystemObjectオブジェクトを作成するサンプルと、簡略化したサンプルです

ただ、戻り値がオブジェクトのため、関数の引数で受け取るようにしています

その経緯については、別のメソッドのところで、書いていますが、オブジェクトは関数の戻り値ではなく、引数で返すことをお勧めしています

・再帰的に繰り返すサンプル

最初にも書きましたけど、CreateFolderメソッドはフォルダを作るメソッドですが、親フォルダがない場合は、エラーになってしまいます
その場合は、以下のサンプルのように親フォルダを確認しながら作成していきます

④再帰的に呼び出して存在しない親階層フォルダを作成するサンプル

Sub CreateFolderRecursion(foldername As String)
    Dim parent      As String   ' 親階層

    ' オブジェクトを作成
    With New FileSystemObject
        ' 親階層を取得
        parent = .GetParentFolderName(foldername)
        
        ' 親階層フォルダがない場合
        If (.FolderExists(parent) = False) Then
            ' 再帰呼び出し
            Call CreateFolderRecursion(parent)
            
        End If
        
        ' 指定階層フォルダがない場合
        If (.FolderExists(foldername) = False) Then
            ' フォルダ作成
            Call .CreateFolder(foldername)
            
        End If

    End With

End Sub

・大量フォルダを作るサンプル

1つのフォルダ内に、番号のフォルダを大量に作る場合がある場合、

①や③の関数を呼び出していては、オーバーヘッドが多くなり無駄ができます

そのため、以下のサンプルのように、FileSystemObjectの作成を1回で済ませ、CreateFolderメソッドを等も呼ぶようにします
⑤大量フォルダを作成するサンプル

Sub CreateFolderMassive(ByVal foldername As String, count As Long)
    Dim sFolder     As String
    Dim idx         As Long
    
    ' オブジェクトを作成
    With New FileSystemObject
        ' countまでループ
        For idx = 1 To count
            ' idxの番号でフォルダを作成する
            sFolder = .BuildPath(foldername, idx)
            ' foldername配下にフォルダを作成
            Call .CreateFolder(sFolder)
            
        Next idx
    
    End With
    
End Sub

・注意点

  • 親フォルダがない場合はエラーになるので、再帰的な作成が必要
  • 関数化して呼び出す場合は、戻り値のオブジェクトは引数で受け渡す
  • 指定するフォルダパスは区切り文字でなくてもよい
  • 呼び出し元でオブジェクトを宣言して、使用し終わったら破棄する

・その他

システムによっては、フォルダが色々な意味を成す場合があります

そのため、フォルダを作成することは、大事なのです

同じような注意点はなるべく書かないようにしていますので、他の記事も参考にしてください

ではでは

広告

やもす ʕ•͡-•ʔ

のんびり!のほほん!がモットーです!w 蕎麦食いたい ライブ行きたい 暑いの嫌い

シェアする