FileSystemObjectのCreateFolderメソッド
FileSystemObjectのCreateFolderメソッドは、指定されたフォルダパスの最下層フォルダを作成します。
既に同じ名前のフォルダが存在する場合はエラー(実行時エラー 58 既に同名のファイルが存在しています。)になります。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Function CreateFolder(Path As String) As Folder
Path | 作成するフォルダパスを指定します。
作成されるフォルダはフォルダパスの最下層のフォルダのみで、最下層より上位のフォルダは作成しません。最下層より上位のフォルダが存在しない場合はエラーになります。 例えば、「C:¥aaa¥bbb」とフォルダパスを指定している場合に、aaaフォルダが存在しない場合はaaaフォルダは作成せずエラーになります。もちろんこの場合は親フォルダのaaaフォルダがないためbbbフォルダも作成しません。 |
戻り値 | フォルダが作成された場合は作成したフォルダのFolderオブジェクトを返します。
作成できなかった場合はNothingを返します。 Nothingかどうかの判定は「If (Folderオブジェクト Is Nothing) Then」で行います。 |
エラー対応
CreateFolderメソッドの引数に指定したフォルダの内容によって、主に2つのエラーが発生します。
- 最下層のフォルダを覗いた部分のフォルダパスが存在しない場合は、「エラー76:パスが見つかりません。」が発生します。
- 引数のフォルダパスの最下層フォルダが既に存在する場合は、「エラー58: 既に同名のファイルが存在しています。」が発生します。
これらのエラーが発生するとメッセージボックスが表示され、処理はそこで止まってしまいます。
処理を止めないようにするためにはエラー処理を適切に行う必要があります。
具体的には「On Error Goto XXX」でエラー発生時にエラーラベルまで処理を飛ばしたり、「On Error Resume Next」でエラーが発生しても処理を継続するようにしておいたほうがよいでしょう。
いずれの場合も、事前にフォルダが存在しているかどうかのチェックを行っておけばCreateFolderメソッドを実行する前にエラーを回避できます。フォルダ存在チェック方法についての詳細は「VBAでフォルダ存在チェック」をご参照ください。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
指定したフォルダパスを作成し、フォルダ作成日時を出力するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub FileSystemObjectCreateFolder() On Error GoTo ERR_LABEL Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim sFolderPath '// 作成フォルダパス Dim f As Folder '// Folderクラス '// 作成フォルダパスを設定 sFolderPath = "C:\aaa\bbb" '// フォルダ作成 Set f = fso.CreateFolder(sFolderPath) '// フォルダ作成日時を出力 Debug.Print f.DateCreated ERR_LABEL: '// エラー発生時 If Err.Number <> 0 Then '// エラー内容を出力 Debug.Print Err.Number & " " & Err.Description End If End Sub |
指定したフォルダパスを作成したあとに、そのフォルダ情報をFolderオブジェクトを使って参照しています。
フォルダ作成時にFolderオブジェクトにCreateFolderメソッドの戻り値を代入していますが、フォルダ情報を扱う必要がなければ代入せずに「Call fso.CreateFolder(sFolderPath)」としても構いません。
フォルダパス不正時などでのエラー対応としてOn Error GoToやエラー情報の出力を行うようにしています。
FileSystemObjectやTextStreamのオブジェクト変数に対して、「Set fso = Nothing」のようなコードがありませんが、なくても問題ありません。詳細については「VBAでのFileSystemObjectとTextStreamの使い方」をご参照ください。