| 
    
     |  | 皆さま,こんにちは。 
 ある特定のファイル名(例えば「aaa.prn」)が Thisworkbook のフォルダ内(サブフォルダは含まない)に存在する場合は,そのファイルを Open ステートメントで開き,無い場合は GetOpenFilename メソッドで選択してから開くようにすることを目標に,過去ログを参考に以下のようなマクロを作成しました。
 
 Sub FileOpen()
 '-------------------------------------------------------------------------
 Dim searchFile As String
 Dim InputFile As String
 Dim fileCounter As Long
 '-------------------------------------------------------------------------
 fileCounter = 0
 InputFile = "aaa.prn"
 searchFile = Dir(Thisworkbook.Path & "\" & InputFile)
 '-------------------------------------------------------------------------
 If searchFile <> "" Then
 fileCounter = 1
 End If
 '-------------------------------------------------------------------------
 Do While searchFile <> ""
 searchFile = Dir
 If searchFile <> "" Then
 fileCounter = fileCounter + 1
 End If
 Loop
 '-------------------------------------------------------------------------
 If fileCounter = 1 Then
 Open InputFile For Input Access Read As #2
 Else
 InputFile = Application.GetOpenFilename _
 (Title:="ファイル開く", _
 FileFilter:="全てのファイル(*.*),*")
 If InputFile = "False" Then Exit Sub
 Open InputFile For Input Access Read As #2
 End If
 '-------------------------------------------------------------------------
 'Call ステートメントに続きます
 MsgBox InputFile & "は" & .FoundFiles.Count & "個あります"
 '今回は例としてこれで
 '-------------------------------------------------------------------------
 Close
 End Sub
 
 上記のコードで思い通りの動作をしてくれるため,全く問題ないのですが,ファイルの検索としては,FileSearch オブジェクトを使うことが一般的だと思い, FileSearch オブジェクトにて表してみようと思い,次のようなコードを作成しました。
 
 Sub FileOpen2()
 '-------------------------------------------------------------------------
 Dim searchFile As String
 Dim InputFile As String
 Dim fileCounter As Long
 '-------------------------------------------------------------------------
 With Application.FileSearch
 .NewSearch
 .LookIn = Thisworkbook.Path
 .SearchSubFolders = False
 .FileName = "aaa.prn"
 .MatchTextExactly = True
 If .Execute() > 0 Then
 Open InputFile For Input Access Read As #2
 Else
 InputFile = Application.GetOpenFilename _
 (Title:="ファイル開く", _
 FileFilter:="全てのファイル(*.*),*")
 If InputFile = "False" Then Exit Sub
 Open InputFile For Input Access Read As #2
 End If
 End With
 '-------------------------------------------------------------------------
 'Call ステートメントに続きます
 MsgBox InputFile & "は" & .FoundFiles.Count & "個あります"
 '今回は例としてこれで
 '-------------------------------------------------------------------------
 Close
 End Sub
 
 例えば,同フォルダ内には "aaa1.prn","c1_aaa.prn","aaa_1.prn" があり "aaa.prn" が無い場合,FileOpen の方は0個を返すのですが,FileOpen2 のほうは「ファイルが見つかりません」とエラーとなってしまいます。
 (3個ファイルが見つかった状態となってしまいます)
 ヘルプからMatchTextExactly プロパティが原因と思ったのですが,False にしても変わりありませんでした。
 現状では FileOpen の方法で問題なくマクロを作動させているのですが,疑問が残ったままにしておくのも嫌なので,FileSearch オブジェクトにおいて,ファイル名の完全一致を制御する方法を教えていただけないでしょうか?
 
 よろしくお願いします。
 
 |  |