access PR

Access 64bitでVBAが動かない時のチェックリスト(32bitでは動いていたのに…の原因)

記事内に商品プロモーションを含む場合があります

結論:64bitで動かない原因の多くは「Declare文」と「API」

Accessを 32bit から 64bit に変更した直後、
それまで問題なく動いていたVBAが

  • コンパイルエラーになる

  • 実行時に止まる

  • 何も起きない

といった症状を起こすことがあります。

原因のほとんどは
Windows API の宣言(Declare文)が64bitに対応していないことです。


なぜ64bitで急に動かなくなるのか

32bit Access では通っていたコードでも、
64bit Access では次の点が厳密にチェックされます。

  • ポインタサイズの違い

  • Declare文に PtrSafe が必須

  • LongLongPtr の使い分け

👉 64bitは制限が厳しくなったと考えると分かりやすいです。

チェック①:Declare文に PtrSafe が付いているか

64bit Accessでは、
Windows API を使う場合に PtrSafe が必須です。

❌ 32bit用のままの例

Declare Function GetTickCount Lib “kernel32” () As Long

⭕ 64bit対応

Declare PtrSafe Function GetTickCount Lib “kernel32” () As Long

これが無いだけで
**コンパイルエラー(宣言が正しくありません)**になります。

チェック②:Long と LongPtr を正しく使っているか

ポインタやハンドルを扱う変数は、
64bitでは Long では足りません

よくある間違い

Dim hWnd As Long

正しい書き方

Dim hWnd As LongPtr

  • 数値 → Long

  • ポインタ・ハンドル → LongPtr

これが64bit対応の基本です。

チェック③:APIを本当に使う必要があるか

実務では次のようなケースが非常に多いです。

  • ネットのコードをそのままコピペ

  • 実は Access 標準機能で代替できる

たとえば
Clipboard操作やコピー処理は、
APIを使わなくても実装できます。

👉 APIを使わない
32bit / 64bit 両対応で安全


チェック④:参照設定がズレていないか

Accessのバージョン変更やPC変更後に、
参照設定の不整合が起きることがあります。

確認方法

VBE(Alt + F11)
ツール
参照設定

  • 「参照不可」と表示されていないか

  • 不要なライブラリがチェックされていないか

これだけで解決する場合もあります。


チェック⑤:古いActiveX・コントロールを使っていないか

64bit Accessでは、

  • 古いActiveX

  • サードパーティ製コントロール

動作しない/読み込めない 場合があります。

エラーが出ないのに動かない時は、
フォーム上のコントロール自体も疑ってください。

よくある勘違い

❌ Access 64bitは不安定
❌ VBAが壊れている
❌ Officeのバージョンの不具合

👉 実際は
32bit前提のコードが残っているだけのことがほとんどです。


どうしても直らない場合の考え方

  • APIを使わずに書き直せないか

  • Access標準機能で代替できないか

実務では、
APIを捨てた方が安定・保守が楽になるケースが多いです。

まとめ

  • 64bitでVBAが動かない原因は Declare文が最多

  • PtrSafeLongPtr を必ず確認

  • APIは必要最小限に

  • 標準機能で代替できるならその方が安全

👉 64bit対応とは、難しくすることではなく
👉 余計な依存を減らすこと
です。

内部リンク

Accessでよく出る「型が一致しません」エラーの正体

Access VBAでClipboardを扱う最も簡単な方法(64bit対応・API不要)