Microsoft Access 掲示板

テキスト内にエラーを起こす文字がある場合の処理 / 3

4 コメント
views
4 フォロー
3
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さん指摘の元ファイルが開いている場合の他、アクセス権の問題(書き込み許可がない)とかもあり得ます

システムでどこまで保証されているかによって必要なエラー対策は変わります。やりたいこととやっていることをもう一度見直して必要な処理を見極めてください

通報 ...
  • 4
    トマト 2020/12/23 (水) 10:28:08 0029a@1c915 >> 3

    詳しく解析していただき、ありがとうございます。
    元のファイルを開いている等については考えていませんでした。
    次にエラーが起きたとき、改めて確認したいと思います。
    エラー対応のコードも組み込みたいと思います。ありがとうございます!