|
皆さま,こんにちは。
ある特定のファイル名(例えば「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 オブジェクトにおいて,ファイル名の完全一致を制御する方法を教えていただけないでしょうか?
よろしくお願いします。
|
|