普段使っているプログラムが、ある日突然使えなくなる。しかもランタイムがどうのこうのと言ってくる。
という事象を体験しました。今回の対象は19127.20192。
どうも、RegExp を使うとランタイムエラーになるようです。Access VBA の開発者に C++ のエラー出されたらお手上げですね。
エラー発生個所を1行ずつ確認すると、以下の Replace で引っかかりました。
With New RegExp
.Pattern = "abcde"
Debug.Print .Replace("abcdefg", 12345)
End With
従来は「12345fg」と返ってきていました。いろいろ調べてみると、型が合っていないようで、Replace は文字列を扱うもの。数値を指定しているところを修正する必要がありました。
With New RegExp
.Pattern = "abcde"
Debug.Print .Replace("abcdefg", CStr(12345))
End With
なお、正規表現構文も変わったようで、「abc(?=de)」のような先読みに対応されたようですが、「(?=ab)cde」のような後読みは無視されるなど、中途半端にモダン化されています。
C++ の大げさなエラーが出たら引数の型を確認しましょう。