- ベストアンサー
ファイル名を合成して検索できない理由とは?
- ファイル名の合成により検索ができない現象が発生しているようです。
- ファイル検索の関数が正しく実行されず、ファイルの存在チェックが不十分なため、上書きが繰り返されてしまう可能性があります。
- ファイルがすでに存在する場合に終了しないため、ファイルの検索処理が正しく実装されていない可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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 この程度でも良いと思いますが、検討してみてください。
その他の回答 (1)
- lark_0925
- ベストアンサー率63% (37/58)
>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を実際に今抱えているブックで 運用することを考えてください。 私が協力できるのは、ここまでです。
お礼
すみません大変ありがとうございました。
補足
早速のご回答誠にありがとうございます。 sub又はfunctionが定義されていません。となり Call MakeCopyFile(fullpath, orgfile) 'ファイル作成 のところでとまってしまうんですがここに何か入れるんでしょうか? 下記のコードは修正して使用するのでしょうか? このまま使用するとfnameを見ていないような気がするのですが・・・ 初心者ですみません。