Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


32367 / 76734 ←次へ | 前へ→

【49605】ファイルの検索について
質問  多摩川  - 07/6/12(火) 19:19 -

引用なし
パスワード
   皆さま,こんにちは。

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

よろしくお願いします。
5 hits

【49605】ファイルの検索について 多摩川 07/6/12(火) 19:19 質問
【49610】Re:ファイルの検索について ウッシ 07/6/13(水) 10:07 発言
【49649】Re:ファイルの検索について 多摩川 07/6/14(木) 17:48 お礼
【49615】Re:ファイルの検索について Jaka 07/6/13(水) 14:46 発言
【49651】Re:ファイルの検索について 多摩川 07/6/14(木) 17:53 お礼
【49623】Re:ファイルの検索について 多摩川 07/6/13(水) 20:56 発言

32367 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free