フォルダ フォルダ存在確認-Dir関数-落とし穴(使用不可文字)

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit


Function FolderExistence(strPath As StringAs Boolean
'********************************************
'フォルダが存在しているかどうかを確認する
'********************************************
Dim strErr As String

On Error GoTo ErrEND:

    If Dir(strPath, vbDirectory) = "" Then
        FolderExistence = False
    Else
        FolderExistence = True
    End If
Exit Function

ErrEND:
strErr = Err.Description

'MsgBox strErr
Debug.Print strErr

FolderExistence = False

End Function


Private Sub test()
Dim a As String, b(20) As String, i As Byte
a = ThisWorkbook.Path

b(1) = "Test"   '予め作成済み
b(2) = "TestZ"  '不存在フォルダ
b(3) = "Test\"      '使用不可文字
b(4) = "Test/"      '使用不可文字
b(5) = "Test:"      '使用不可文字
b(6) = "Test*"      '使用不可文字
b(7) = "Test?"      '使用不可文字
b(8) = "Test"""     '使用不可文字
b(9) = "Test<"      '使用不可文字
b(10) = "Test>"     '使用不可文字
b(11) = "Test|"     '使用不可文字
b(12) = "\Test"     '使用不可文字
b(13) = "/Test"     '使用不可文字
b(14) = ":Test"     '使用不可文字
b(15) = "*Test"     '使用不可文字
b(16) = "?Test"     '使用不可文字
b(17) = """Test"    '使用不可文字
b(18) = "<Test"     '使用不可文字
b(19) = ">Test"     '使用不可文字
b(20) = "|Test"     '使用不可文字

For i = 1 To 20
    If FolderExistence(a & "\" & b(i)) = True Then
        Debug.Print i & ":存在"
    Else
        Debug.Print i & ":不存在"
    End If
Next i

'1: 存在
'2: 不存在
'3: 存在
'4: 存在
'5: 不存在'ファイル名または番号が不正です。
'6: 存在
'7: 存在
'8: 存在
'9: 存在
'10: 存在
'11: 不存在'ファイル名または番号が不正です。
'12: 存在
'13: 存在
'14: 不存在'ファイル名または番号が不正です。
'15: 存在
'16: 不存在
'17: 不存在
'18: 存在
'19: 不存在
'20: 不存在'ファイル名または番号が不正です。

End Sub

フォルダ使用不可文字を指定して確認すると「存在」とみなす文字もある

Dir 関数

指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列型 (String) の値を返します。ドライブのボリューム ラベルも取得できます。

  • 構文

  • Dir[(pathname[, attributes])]
  • Dir 関数の構文は、次の指定項目から構成されます。
  • 指定項目 内容

  • pathname
    省略可能です。ファイル名を表す文字列式を指定します。フォルダ名およびドライブ名も含めて指定できます。引数 pathname に指定した内容が見つからないときは、長さ 0 の文字列 (" ") を返します。
  • attributes
    省略可能です。取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。省略すると、標準ファイルの属性になります。
  • 設定値

  • 引数 attributes の設定値は次のとおりです。
定数 内容
vbNormal 0 標準ファイル
vbReadOnly 1 読み取り専用ファイル
vbHidden 2 隠しファイル
vbSystem 4 システム ファイル。Macintosh では使用できません。
vbVolume 8 ボリューム ラベル。この値を指定すると、すべての属性は無効になります。Macintosh では使用できません。
vbDirectory 16 フォルダ
vbAlias 64 エイリアス ファイル。Macintosh でのみ使用できます。

 

2000年01月01日|[VBサンプルコード]:[フォルダ]