問題
VBAで作ったマクロで以下の処理を行う際にエラーが出る場合、原因としてファイル名が文字化けしていることが考えられます。
- ファイルを移動する
- ファイルをコピーして別のフォルダに保存する
- ファイル名を変更(元のファイル名に文字列を追加する)
原因の調査
エクスプローラーでファイル名を確認してみると文字化けはしていないし、ファイル名の変更や移動ができるにも関わらず、マクロによる操作の場合にエラーとなるので原因を探ったところ、どうもVBEでファイル名を取得した際に文字化けが起こり、ファイル操作ができずエラーになっているようでした。
VBEにてDirでファイル名を取得して値を確認すると、文字化けする文字が「?(ハテナマーク)」になっていることがわかります。
ハテナマークはファイル名として使えないので、移動しようとするとエラーになるんですね。
残念ながらOSやExcelに言語パックを追加しても、VBEには適用されないっぽいです。
(確証がないので勘違いかもしれませんが)
文字化け回避方法
そもそも文字化けする可能性のあるファイル名にしない
日本語版Excelであれば、ファイル名が英語or日本語なら問題ないと思います。
私の場合は中国からもエクセルファイルが送られてくる現場だったので、この方法は採用されませんでした。
ならそもそもエクセル申込書をやめt(ry)
コードで回避する
今回は文字化けするファイル数が少なかったので、下記のようなコードで弾いて後で手動でファイル移動することにしました。
なお記載はありませんが、この処理の前にDirでfilenameを取得している前提とします。
If InStr(filename, "?") < 1 Then
'文字化けがなければ通常の処理
Else
'文字化けしてた時の処理
'単にスキップするだけならElse不要
End If
すごくシンプルに「filenameに「?」が入っていれば文字化けしているとする」ということにしました。数が少なければこれで良いかなと思います。
数が多ければリネームする処理を入れると思いますが、ファイル名で色々管理している場合はリネームすると面倒なことになるので、やっぱりエクセルを申込書にすr(ry)
【2019/4/5追記】
いただいたコメントによると、Scripting.FileSystemObject
を使ってファイル名取得すれば文字化けしなさそうです。
業務を離れてしまってすぐ試せないので確認できていませんが取り急ぎ。
おわりに
VBEの文字化け対処方法があればご教示ください。