• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイル名を合成すると検索できないのでしょうか?)

ファイル名を合成して検索できない理由とは?

このQ&Aのポイント
  • ファイル名の合成により検索ができない現象が発生しているようです。
  • ファイル検索の関数が正しく実行されず、ファイルの存在チェックが不十分なため、上書きが繰り返されてしまう可能性があります。
  • ファイルがすでに存在する場合に終了しないため、ファイルの検索処理が正しく実装されていない可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.1

FileSearchオブジェクトは、バグがいくつもあると聞いていますし、 Excelの新しいバージョンでは、なくなっています。 私は、OSのファイル管理にアクセスするなら、ちょっと遅くても FileSystemObjectを使っています(簡単ですから・・・)。 今回のファイルの存在の有無なら、FileSystemObjectを 使ったほうが良いと思いますが、投稿されたコードは、 FileSearchオブジェクトの使用方法が間違っているみたいですよ!! Function SearchFile(fname As String) As Boolean   Dim g0 As Long   Dim fs As FileSearch   Dim wk As Variant   Dim pathnm As String   wk = Split(fname, "\")   pathnm = ""   For g0 = LBound(wk) To UBound(wk) - 1    If g0 < UBound(wk) - 1 Then      pathnm = pathnm & wk(g0) & "\"    Else      pathnm = pathnm & wk(g0)      End If    Next   SearchFile = False   Set fs = Application.FileSearch   With fs    .NewSearch    .LookIn = pathnm    .Filename = wk(UBound(wk))    If .Execute() > 0 Then      SearchFile = True      End If    End With   Erase wk End Function 投稿されたコードを使って修正するとこんなことになりました。 更にファイルコピーを行う前のオーバーライトのチェックのための 「ファイルの存在の有無」なら、FSO(FileSystemObject)のCopyFileメソッドなら、オーバーライトの許可の有無というオプションがあります。 よって、 上書きをゆるさないファイルコピーなら、 '================================================== Sub test()   Dim a, b   a = Application.GetOpenFilename   b = Application.GetSaveAsFilename   MsgBox cpfile(a, b) End Sub '================================================= Function cpfile(a, b) As Variant   On Error Resume Next   With CreateObject("scripting.filesystemobject")    .CopyFile a, b, False    End With   cpfile = Err.Number   If cpfile <> 0 Then    cpfile = Err.Description    End If End Function この程度でも良いと思いますが、検討してみてください。

wingup
質問者

補足

早速のご回答誠にありがとうございます。 sub又はfunctionが定義されていません。となり Call MakeCopyFile(fullpath, orgfile) 'ファイル作成 のところでとまってしまうんですがここに何か入れるんでしょうか? 下記のコードは修正して使用するのでしょうか? このまま使用するとfnameを見ていないような気がするのですが・・・ 初心者ですみません。

その他の回答 (1)

  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.2

>sub又はfunctionが定義されていません。となり >Call MakeCopyFile(fullpath, orgfile) 'ファイル作成 >のところでとまってしまうんですがここに何か入れるんでしょうか? それは、MakeCopyFileというFunctionまたは、プロシジャーが 存在しないからです。 再度投稿です。 新規ブック(あくまでも新規ブックであってwingupさんが抱えている問題のブックでありません)の標準モジュールに Sub test()   Dim a, b   a = Application.GetOpenFilename   b = Application.GetSaveAsFilename   MsgBox cpfile(a, b) End Sub '================================================= Function cpfile(a, b) As Variant   On Error Resume Next   With CreateObject("scripting.filesystemobject")    .CopyFile a, b, False    End With   cpfile = Err.Number   If cpfile <> 0 Then    cpfile = Err.Description    End If End Function でtestを実行して新規コピーが出来て、 上書きコピーが出来ないことを確認してください。 確認後、このcpfileというFunctionを実際に今抱えているブックで 運用することを考えてください。 私が協力できるのは、ここまでです。

wingup
質問者

お礼

すみません大変ありがとうございました。

関連するQ&A