プロが教える店舗&オフィスのセキュリティ対策術

Cドライブ直下にある「Aフォルダ」の中に フォルダ名:(指定文字1)[スペースを含む任意文字](指定文字2) と命名されたフォルダが存在するか調査するマクロを作成したいのですが、下記のコードでは上手く動きません。正しいコードを教えて下さい。

Private Sub CommandButton1_Click()

'Aフォルダに指定のフォルダが存在するか調査する
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists("C:\Aフォルダ\指定文字1*指定文字2") = False Then
MsgBox "フォルダはありません"
Else
MsgBox "フォルダはあります"
End If
Set FSO = Nothing

End Sub

A 回答 (8件)

こんにちは


しばらく経っていますが、出来ましたか?
サンプルコード(FileSystemObject)
Sub GetSubFolderPath()
Dim parent_folder As String
Dim folder_name As String
Dim chFolder_path As String
Dim fso As Object, f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
parent_folder = "C:\Aフォルダ"
folder_name = "指定文字1*指定文字2"
On Error Resume Next '親フォルダが存在しない時の対策(手抜き)
If (0 < fso.GetFolder(parent_folder).SubFolders.Count) Then
  For Each f In fso.GetFolder(parent_folder).SubFolders
   If f.Name Like folder_name Then
    chFolder_path = f.Path
    Exit For
   End If
  Next f
End If
If chFolder_path <> "" Then
  MsgBox ("あります" & vbCrLf & chFolder_path)
Else
  MsgBox ("ありません")
End If
End Sub

対象が複数ある場合は、配列などにパスを納めれば対象を広げて処理が出来ると思います。
    • good
    • 0
この回答へのお礼

指定文字1と指定文字2の間に文字を挟んでいる場合を正確に把握する事がなかなか出来ず、諦めていたところです。
上のコードでやりたい事が実現出来ました。
本当に感謝いたします。
ありがとう御座いました。

お礼日時:2021/02/28 14:18

No5です



>No6様
なるほどです。
指定文字2が拡張子の後部に合致する可能性までは思い至っておりませんでした。

わざわざお手数をかけてまでご教示いただき、ありがとうございました。
    • good
    • 0

No5様


>vbNormal(属性のないファイル)が正しいでしょう。
>(「通常ファイル」は属性ありと認識しています)

C:\にsampleという名称のフォルダを作り、
そのフォルダ内に、excelでBook1.xlsxを作成し、保存します。
その状態で、以下のマクロを実行すると、「フォルダはあります」
と表示されます。
Book1.xlsxは属性のないファイルなのでしょうか?

Sub sample()
Dim s
Const folderPath = "c:\sample\Book*x"

If Dir(folderPath, vbDirectory) = "" Then s = "せん" Else s = "す"
MsgBox "フォルダはありま" & s
End Sub
    • good
    • 0

No3です



>No4様へ
ご指摘の内容は間違ってはいませんが・・・

>vbNormal(通常ファイル)=0の為、
は正確ではありませんね。
vbNormal(属性のないファイル)が正しいでしょう。
(「通常ファイル」は属性ありと認識しています)

ですので、質問者様が「属性のないファイル」が存在するような環境下で使用する場合には、ご指摘のような事象は発生し得ることになりますが、一般的なフォルダに対して使用することを想定するならば、そのような可能性は相当に少ないものと想像します。
    • good
    • 1

No3のかたへ


Dir関数の設計バグになりますが、
「指定文字1*指定文字2」に該当するフォルダがなくて、
「指定文字1*指定文字2」に該当するファイルが存在する場合、
Dirの結果は""にはなりません。
従って、「フォルダはあります」というメッセージが表示されます。
「フォルダ又はファイルのどちらかかはあります」というメッセージにすれば、動作上は正しいことになりますが、それを質問者の方が望んでいるかどうかは、わかりません。
Dir関数の第2引数は、vbDirectoryの他にvbReadOnlyとかの属性をORで指定できるようになっていますが、vbNormal(通常ファイル)=0の為、
常に、vbNormalが指定されていることになってしまいます。
従って、
Dir(folderPath, vbDirectory) は
Dir(folderPath, vbDirectory+vbNormal)と同じ結果になります。

フォルダだけに限定し、存在チェックを行うなら、
No2のかたのようにするのが妥当かと思います。
    • good
    • 0

こんばんは



指定パスでの、フォルダの有無を調べたいということと解釈しました。

Sub sample()
Dim s
Const folderPath = "C:\Aフォルダ\指定文字1*指定文字2"

If Dir(folderPath, vbDirectory) = "" Then s = "せん" Else s = "す"
MsgBox "フォルダはありま" & s
End Sub
    • good
    • 1

あくまで指定した明確なフォルダが存在するかどうかでしょうから、正規表現みたいにやるなら『Aフォルダ内のサブフォルダ名を順にチェックする』しかないのでは?


初級者レベルですが。
    • good
    • 1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!