[Access] 正規表現の仕様が変わったようだ

 普段使っているプログラムが、ある日突然使えなくなる。しかもランタイムがどうのこうのと言ってくる。

という事象を体験しました。今回の対象は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++ の大げさなエラーが出たら引数の型を確認しましょう。