サーチ…


備考

Scripting.FileSystemObjectは、このトピックのレガシーメソッドよりはるかに堅牢です。ほとんどすべての場合に好ましいはずです。

フォルダとファイルが存在するかどうかの判断

ファイル:

ファイルが存在するかどうかを判断するには、ファイル名をDir$関数に渡し、結果が返されるかどうかをテストします。ことに注意してくださいDir$ 特定のファイルをテストするために、渡されたので、ワイルドカードをサポートしてpathName 、それは彼らが含まれていないことを確認するためにテストする必要があります。以下のサンプルはエラーを発生させます。これが望ましい動作でない場合、関数を変更して単にFalse返すことができます。

Public Function FileExists(pathName As String) As Boolean
    If InStr(1, pathName, "*") Or InStr(1, pathName, "?") Then
        'Exit Function   'Return False on wild-cards.
        Err.Raise 52    'Raise error on wild-cards.
    End If
    FileExists = Dir$(pathName) <> vbNullString
End Function

フォルダ(Dir $メソッド):

Dir$()関数を使用して、オプションattributesパラメーターに渡すvbDirectoryを指定して、フォルダーが存在するかどうかを判断することもできます。この場合、渡されたpathName値はパスの区切り文字( \ )で終わらなければなりません。一致するファイル名は誤検出を引き起こすためです。ワイルドカードは最後のパス区切り文字の後にのみ使用できるので、入力にワイルドカードが含まれていると、下のサンプル関数はランタイムエラー52をスローします。これが目的の動作ではない場合は、機能の上部にある「 On Error Resume Nextコメントを外します。また、 Dir$は相対ファイルパス(つまり..\Foo\Bar )をサポートしているので、現在の作業ディレクトリが変更されていない限り、結果は有効であることが保証されます。

Public Function FolderExists(ByVal pathName As String) As Boolean
    'Uncomment the "On Error" line if paths with wild-cards should return False
    'instead of raising an error.
    'On Error Resume Next    
    If pathName = vbNullString Or Right$(pathName, 1) <> "\" Then
        Exit Function
    End If
    FolderExists = Dir$(pathName, vbDirectory) <> vbNullString
End Function

フォルダ(ChDirメソッド):

ChDirステートメントは、フォルダが存在するかどうかをテストするためにも使用できます。このメソッドはVBAが実行されている環境を一時的に変更するため、考慮する場合は代わりにDir$メソッドを使用する必要があります。そのパラメータをあまり寛容にしないという利点があります。このメソッドは相対ファイルパスもサポートしているので、 Dir$メソッドと同じ警告があります。

Public Function FolderExists(ByVal pathName As String) As Boolean
    'Cache the current working directory
    Dim cached As String
    cached = CurDir$

    On Error Resume Next
    ChDir pathName
    FolderExists = Err.Number = 0
    On Error GoTo 0
    'Change back to the cached working directory.
    ChDir cached
End Function

ファイルフォルダの作成と削除


注:簡潔にするため、以下の例では、このトピックの「フォルダとファイルが存在するかどうかの判断」の FolderExists関数を使用しています。


MkDirステートメントを使用すると、新しいフォルダを作成できます。ドライブ文字( C:\Foo )、UNC名( \\Server\Foo )、相対パス( ..\Foo )、または現在の作業ディレクトリ( Foo )を含むパスを受け入れます。

ドライブまたはUNC名が省略された場合(つまり\Foo )、現在のドライブにフォルダが作成されます。これは、現在の作業ディレクトリと同じドライブであっても、そうでなくてもかまいません。

Public Sub MakeNewDirectory(ByVal pathName As String)
    'MkDir will fail if the directory already exists.
    If FolderExists(pathName) Then Exit Sub
    'This may still fail due to permissions, etc.
    MkDir pathName
End Sub

RmDirステートメントを使用すると、既存のフォルダを削除できます。 MkDirと同じ形式のパスを受け入れ、現在の作業ディレクトリとドライブと同じ関係を使用します。このステートメントはWindowsのrdシェルコマンドと似ているので、実行時エラー75がスローされます。ターゲットディレクトリが空でない場合は、「パス/ファイルアクセスエラー」です。

Public Sub DeleteDirectory(ByVal pathName As String)
    If Right$(pathName, 1) <> "\" Then
        pathName = pathName & "\"
    End If
    'Rmdir will fail if the directory doesn't exist.
    If Not FolderExists(pathName) Then Exit Sub
    'Rmdir will fail if the directory contains files.
    If Dir$(pathName & "*") <> vbNullString Then Exit Sub
    
    'Rmdir will fail if the directory contains directories.
    Dim subDir As String
    subDir = Dir$(pathName & "*", vbDirectory)
    Do
        If subDir <> "." And subDir <> ".." Then Exit Sub
        subDir = Dir$(, vbDirectory)
    Loop While subDir <> vbNullString
    
    'This may still fail due to permissions, etc.
    RmDir pathName
End Sub


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow