【Access】Access32bit→64bit両方対応

Access(office)も最近は64bit版が主流となってきました。
古いAccessパッケージを購入したくても既に販売されていなく
環境構築も難しくなってきました。

そこで、最近問い合わせが多いのが
「新しく(officeの)バージョンアップしたんだけど動かなくなった。」

Accessのバージョンが32bit→64bitになると動かなくなる可能性があります。

理由は色々ありますが、1番大きいのは「Windows APIの宣言」です。
APIを使用している場合は、大概動かなくなります。
対策としては
’32bit
Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)

’64bit
Declare PtrSafe Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As LongPtr)

にするだけです。64bitの場合「PtrSafe 」が必要となります。

でも、場合によっては両方とりあえず対応にしたい場合もあると思います。
その場合は

' Windows  APIの宣言
#If VBA7 And Win64 Then
  ' 64Bit 版
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
  ' 32Bit 版
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

と記述するだけでOKです。コンパイルエラーも起きないので問題ないです。

それでも、エラーが発生する場合も時々あります。
古いAccessのコードをそのまま移行しようとすると新しいバージョンでは対応していなくて
エラーになるのは良くあることです。

・画面遷移が上手くできない。
・CALLできない。するとエラーになる。
・変なワーニングメッセージが毎回表示される。
・今まで更新できたのに更新できなくなった。

意外と、10年以上前のコードは特殊な書き方をしているものも時々あって
コードを書き換えると動いたりします。

もし、何か問題がある場合は、修正しますのでお問い合わせをお願いします。
その場合は、Accessのバージョン情報をお知らせ頂けるとスムーズかと思います。

コメント

タイトルとURLをコピーしました