Microsoft Access 掲示板

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

4 コメント
views
4 フォロー

現在下記コードにて、testPathに設定されたパスについて
「☆」を「★」に変換する処理を行っていますが、
稀にデバッグエラーが起こります。
(今エラー内容について確認できず申し訳ありません)

Name testPath As Replace(testPath, "☆", "★")

なぜエラーが起こるのかというと、どうもパス内の文字のどれかが原因していたようなのですが
現在、テキストを修正してしまい、どんな文字が使われていたのか定かではありません。。
ぼやっとした質問で申し訳ないのですが、そのような場合、エラーを避ける方法はありますでしょうか。

トマト
作成: 2020/12/18 (金) 16:53:01
通報 ...
2

Name ステートメント (VBA) | Microsoft Docs

上記によると、エラーになる原因としては、下記の2点が考えられます。

newpathname には、既存のファイル名は指定できません。

開いているファイルに Name を使用すると、エラーが発生します。

それ以外のエラーについてはちょっと分かりません。

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

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