Accessが64bit版で動かないのはなぜ?8つの書き方を試し、直す行を数えた
64bit版のOfficeでAccessの画面やボタンが動かない原因の多くは、VBAのDeclare文にPtrSafeが付いていないことと、32bit版しかない部品を使っていることです。64bit版のAccessで試すと、PtrSafeのないDeclare文が1行あるだけで、別の関数まで呼べなくなりました。直す行を数えて直すか、急ぐときは32bit版のOfficeに入れ直します。Access引越しで試した結果と、数えるスクリプトを載せます。(2026年10月時点)
全体の流れと費用はAccess・オフコンの引越しのページにまとめています。
要点
- 64bit版のAccessが動かない原因の多くは、PtrSafeのないDeclare文と、32bit版しかない部品です。
- Microsoft 365の64bit版で8つの書き方を試すと、5つが止まり、3つは動きました。
- PtrSafeのないDeclare文が1行あるだけで、APIを使わない別のモジュールの関数も呼べなくなりました。
- TreeViewとListViewは動きましたが、DateTimePickerとScript Controlは作れませんでした。
- 直す行はスクリプトで数えられます。今日動かす必要があるときは、32bit版のOfficeに入れ直します。
目次
64bit版のOfficeでAccessが動かないのは、なぜですか?
多くは、VBAのDeclare文にPtrSafeが付いていないか、32bit版しかない部品を使っているためです。Microsoft 365とOffice 2019・2021・2024は、32bit版を選ばない限り64bit版が入ります。PCを入れ替えたとたんに動かなくなるのは、このためです。作り直しまで含めた全体の流れは、Access・オフコンの引越しにまとめています。
Microsoftの互換性の説明(2024年12月更新)は、64bit版のOfficeが32bitの部品を読み込めないとしています。PtrSafeのないDeclare文も、コンパイルできません。出た文面で、原因はほぼ分かれます。
| 出た文面 | 原因 | 直し方 |
|---|---|---|
| 64 ビット システムで使用するために更新する必要があります | Declare文にPtrSafeがない | PtrSafeを付け、ハンドルはLongPtrに |
| ActiveX コンポーネントはオブジェクトを作成できません | 32bit版しかないコントロール | 64bit版の部品に替えるか、使わない作りに |
| オブジェクト ライブラリは登録されていません | 参照設定の先が32bit版だけ | 参照を外し、代わりの部品を使う |
| .accde・.mdeが開けない | 32bit版でコンパイルしたファイル | 元の.accdbを64bit版でコンパイルし直す |
PtrSafeのないDeclare文が1行あると、何が起きますか?
同じファイルのVBAが、まとめて動かなくなります。API(WindowsのDLLの関数)を呼ぶ行だけが止まるのではありません。私が64bit版のAccessで試したときは、Declare文と関係のない関数も呼べませんでした。
試したのは、Microsoft 365のAccess 16.0(ビルド20430、64bit)です。標準モジュールを2つ作り、1つにはPtrSafeのないDeclare文を1行だけ置きました。もう1つには「ok」と返すだけの関数を置いています。
' modApi(この1行だけ)
Private Declare Function GetTickCount Lib "kernel32" () As Long
' modMain
Public Function Probe() As String: Probe = "ok": End Function
VBEで[デバッグ]→[コンパイル]を押すと、次の文面が出ました。
コンパイル エラー:
このプロジェクトのコードは、64 ビット システムで使用するために更新する必要があります。Declare ステートメントの確認および更新を行い、次に Declare ステートメントに PtrSafe 属性を設定してください。
外からProbeを呼ぶと「‘Probe’ プロシージャが見つかりません。」となります。Declare文にPtrSafeを1語足すと、「ok」が返りました。フォームのボタンの処理も同じVBAの中にあるので、Declare文1行のためにボタン全部が止まりえます。
PtrSafeを付けるだけでは足りないこともあります。Microsoftのリファレンスは、ポインタとハンドルの引数と戻り値をLongPtrに直すよう求めています。
TreeViewなどの32bitのコントロールは、64bit版で動きますか?
Microsoft 365の64bit版では、TreeViewとListViewは動きました。日付を選ぶDateTimePickerと、文字列の式を実行するScript Controlは作れませんでした。32bit時代の書き方を8つ試し、5つが止まっています。
Microsoftの互換性の説明は、TreeViewやListViewを含むMSComCtlを、読み込めない部品に挙げています。
一方、Microsoftの社員はコミュニティで次のように答えています(2018年1月31日)。2017年のバージョン1707で、64bit版のMSComCtlが入ったという内容です。試したPCでも、Officeのフォルダーに64bit版のMSCOMCTL.OCXが入っていました。
ただし、買い切りのOfficeにも同じ部品が入るかは確かめていません。Microsoft 365でも、DateTimePicker(MSComCt2)とScript Controlは作れませんでした。DAO 3.6は参照設定に追加できませんでした。
直す行は、どうやって数えますか?
Accessのファイルを開き、VBAの全モジュールの行を読んで数えます。Access引越しで書いたPowerShellのスクリプト「count_declare.ps1」は、次の3つを数えます。
- Declare文の数と、PtrSafeの有無
- 参照設定のうち、壊れているものと、32bit用のフォルダー(SysWOW64)を指すもの
- フォームに置いたActiveXコントロールの種類
要点は、Declare文の行を見つけてPtrSafeの有無で分ける数行です。#If VBA7の#Else側は古いOffice向けの書き分けなので、直す行から外しています。
foreach ($c in $a.VBE.ActiveVBProject.VBComponents) {
for ($i = 1; $i -le $c.CodeModule.CountOfLines; $i++) {
$line = $c.CodeModule.Lines($i, 1)
if ($line -match '^\s*(Public\s+|Private\s+)?Declare\s+') {
$kind = if ($line -match '\bPtrSafe\b') { 'PtrSafeあり' } else { 'PtrSafeなし' }
}
}
}
架空のサンプル(標準モジュール1つ、フォーム1つ)で数えると、直す場所はDeclare文4行と参照設定1つでした。
限界もあります。開いた時点でAutoExecマクロが動くおそれもあるので、必ずコピーで試してください。.accdeや.mdeはVBAのソースがなく、数えられません。
急ぐときは、32bit版のOfficeに戻せばよいですか?
今日動かす必要があるなら、32bit版に入れ直すのがいちばん早い応急処置です。Microsoftも、32bit版を選ぶ理由に、64bit版のない部品と32bit版の.accdeを挙げています。
入れ直す順番は決まっています。32bit版と64bit版は同じPCに両方は入れられません。今のOfficeをアンインストールしてから、32bit版を入れます。ほかの社員のPCも同じ版にそろえないと、同じファイルが人によって動いたり止まったりします。
戻すのは時間を稼ぐ手です。次にPCを入れ替えると、また64bit版が入ります。Access 2021の提供は2026年10月13日に終わりました。戻している間に、直すか移すかを決めておきます。
PtrSafeのないDeclare文が数行で、ほかの部品が動くなら、直して使い続けるほうが早く済みます。64bit版のない部品が画面の中心にあるときや、VBAを読める人が社内にいないときは、直してもまた同じことが起きます。どのテーブルや帳票を移すかは、作った人がいないAccessの中身を数える手順で数えられます。
このサイトで相談するには?
64bit版で止まったAccessも、Access引越しで、直すか移すかを一緒に見ます。何をどう頼むか決まっていなくても大丈夫です。御社のやり方に合わせて、進め方を一緒に考えます。
準備は要りません。無料で相談するからお送りください。返信は最短当日です。
よくある質問
- 自分のOfficeが64bit版かどうかは、どこで分かりますか?
- Accessの[ファイル]→[アカウント]→[Accessのバージョン情報]で分かります。開いた画面に、バージョン番号と32ビットか64ビットかが出ます。
- PtrSafeを付ければ、それだけで直りますか?
- いいえ、付けるだけでは足りないことがあります。ウィンドウのハンドルやポインタを受け渡す引数と戻り値は、LongPtrに直します。
- 32bit版と64bit版のOfficeを、同じPCに両方入れられますか?
- いいえ、入れられません。切り替えるときは、今のOfficeをアンインストールしてから、もう一方を入れます。
- .accdeのファイルしか残っていないときは、どうしますか?
- 元の.accdbを探します。32bit版で作った.accde・.mdeは64bit版では動かず、VBAのソースがないので直せません。見つからなければ32bit版で使い続けます。
この数字の出し方
この記事の自前の数字は、次の見本・条件・回数で出しました。主宰が確かめ、更新日は2026年10月17日です。スクリプトの名前から、同じ手順を自分のファイルで再現できます。
- Access引越しの実験(2026年10月16日、Microsoft 365 の64bit版 Access。VBAの書き方と部品の8項目を試した)。scripts/figs/access64_probe.ps1・access64_figs.py
出典
- Microsoft Learn「Compatibility between the 32-bit and 64-bit versions of Office」(2024年12月更新)(2026年10月16日確認)
- Microsoft Learn「このプロジェクトのコードは、64 ビット システムで使用できるように更新する必要があります」(VBA 言語リファレンス)(2026年10月16日確認)
- Microsoft サポート「64 ビット版または 32 ビット版の Office を選択する」(2026年10月16日確認)
- Microsoft サポート「使用している Office のバージョンを確認する」(2026年10月16日確認)
- Microsoft Tech Community の Microsoft 社員の回答(2018年1月31日)「1707 included 64-bit support for the MSCOMCTL.ocx」(2026年10月16日確認)