hiroton
2020/12/19 (土) 23:59:56
23396@358c8
もしかして:
Dim fileName As String
fileName = Dir(testPath)
Name testPath As Left(testPath, Len(testPath) - Len(fileName)) & Replace(fileName, "☆", "★")
起こりうること全部チェックするなら
Dim fileName As String
Dim folderPath As String
fileName = Dir(testPath)
folderPath = Left(testPath, Len(testPath) - Len(fileName))
fileName = Replace(fileName, "☆", "★")
If Dir(testPath) = "" Then
'元ファイルが存在しません
ElseIf Dir(folderPath & fileName) <> "" Then
'変更後のファイル名がすでに存在します
Else
On Error Resume Next
Name testPath As folderPath & fileName
If Err <> 0 Then
'予期せぬエラーが発生しました
End If
On Error Goto 0
End If
たとえばtestPath
が「C:\☆★☆注目☆★☆\☆hoge.dat
」だと変換後のパスは「C:\★★★注目★★★\★hoge.dat
」となります。大抵そんなフォルダないよって感じでエラーになります。もしかしませんか?
あと、当たり前だけどtestPath
に"☆"
が含まれていないとName testPath As testPath
になるんでエラーになります
最初のコードも2番目のコードもやっていること自体を変えている(ファイル名のみReplace
の対象とする)ので、フォルダ名も変換されるのが正しい処理なら最初のコードはもしかしません。2番目のコードにはフォルダの存在チェック処理を追加する必要があります
予期せぬエラーについてはhatenaさん指摘の元ファイルが開いている場合の他、アクセス権の問題(書き込み許可がない)とかもあり得ます
システムでどこまで保証されているかによって必要なエラー対策は変わります。やりたいこととやっていることをもう一度見直して必要な処理を見極めてください
通報 ...
詳しく解析していただき、ありがとうございます。
元のファイルを開いている等については考えていませんでした。
次にエラーが起きたとき、改めて確認したいと思います。
エラー対応のコードも組み込みたいと思います。ありがとうございます!