Access引越し中小企業のAI導入支援|古い業務システムの作り直しからAccess・オフコンの引越し 専門

コラム仕組みと実験

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に入れ直します。
目次
  1. 64bit版のOfficeでAccessが動かないのは、なぜですか?
  2. PtrSafeのないDeclare文が1行あると、何が起きますか?
  3. TreeViewなどの32bitのコントロールは、64bit版で動きますか?
  4. 直す行は、どうやって数えますか?
  5. 急ぐときは、32bit版のOfficeに戻せばよいですか?
  6. このサイトで相談するには?
  7. よくある質問

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版でコンパイルし直す
64bit版でAccessが動かないときの切り分けの図。出た文面から、Declare文のPtrSafe、32bit版しかない部品、32bit版でコンパイルした.accdeの3つの原因と直し方に分け、急ぐときは32bit版のOfficeを入れ直す64bit 版で動かないときの切り分け:出た文面で分ける出た文面原因直し方「64 ビット システムで使用するために更新する必要があります」Declare 文に PtrSafe がないPtrSafe を付け、ハンドルは LongPtr に「ActiveX コンポーネントはオブジェクトを作成できません」など32bit だけの部品(コントロール・参照)64bit 版の部品に替えるか、使わない作りに.accde・.mde が開けない(VBA のソースがないファイル)32bit 版でコンパイルされたファイル元の .accdb を、64bit 版でコンパイルし直す今日動かす必要があるとき:Office をアンインストールしてから 32bit 版を入れ直す(同じ PC に両方は入れられない)出典:Microsoft Learn「Compatibility between the 32-bit and 64-bit versions of Office」、Microsoft サポート(2026年10月16日確認)
図1 出た文面で原因を分ける。MicrosoftのLearnとサポートの説明を、Access引越しが1枚にまとめました。

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つが止まっています。

64bit版Accessで32bit時代の書き方を8つ試した結果の表。PtrSafeのないDeclare文、DateTimePicker、Script Control、MSComCt2とDAO 3.6の参照設定の5つが止まり、PtrSafeを付けたDeclare文とTreeView、ListViewは動いた64bit 版 Access で、32bit 時代の書き方を8つ試した結果試したもの結果出た文面PtrSafeのないDeclare 1行(別のモジュール)止まったコンパイル エラー: このプロジェクトのコードは、64 ビット シ…同じDeclareにPtrSafeを付ける動いたokTreeView(MSComCtl)動いた作成できたListView(MSComCtl)動いた作成できたDateTimePicker(MSComCt2)止まったエラー 429: ActiveX コンポーネントはオブジェクトを作…Script Control(msscript.ocx)止まったクラスが登録されていません(-2147221164)MSComCt2 の参照設定止まったオブジェクト ライブラリは登録されていません。DAO 3.6 の参照設定止まったDLL 読み込み時のエラーです。実験:Microsoft 365 の Access 16.0(ビルド20430、64bit)、Windows 11、2026年10月16日、Access引越し 主宰。スクリプト access64_probe.ps1
図2 64bit版Accessで8つの書き方を試した結果。主宰が2026年10月16日に試しました。手順はaccess64_probe.ps1にあります。

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つを数えます。

  1. Declare文の数と、PtrSafeの有無
  2. 参照設定のうち、壊れているものと、32bit用のフォルダー(SysWOW64)を指すもの
  3. フォームに置いた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つでした。

架空のサンプルのaccdbをcount_declare.ps1で数えた横棒グラフ。PtrSafeなしのDeclare文が4行、PtrSafeありが1行、古い版向けが1行、32bitのフォルダーを指す参照設定が1つ架空のサンプル .accdb を count_declare.ps1 で数えた結果標準モジュール1つ+フォーム1つ。直す必要があるのは「PtrSafe なし」と「32bit のフォルダーを指す参照」PtrSafeなし4PtrSafeあり1古い版向け(#Else側)132bitのフォルダーを指す参照1直す場所(スクリプトの出力)modApi:3〜5 行目 GetTickCount・FindWindow・SleepForm_frmMenu:2 行目 ShellExecute(引数 hwnd は LongPtr に)参照設定 MSScriptControl C:\Windows\SysWOW64\msscript.ocx実験:Microsoft 365 の Access 16.0(ビルド20430、64bit)、Windows 11、2026年10月16日、Access引越し 主宰。サンプルの中身はすべて架空
図3 サンプルを数えた結果。直すのは、PtrSafeのない4行と、msscript.ocxを指す参照設定です。

限界もあります。開いた時点で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

出典

  1. Microsoft Learn「Compatibility between the 32-bit and 64-bit versions of Office」(2024年12月更新)(2026年10月16日確認)
  2. Microsoft Learn「このプロジェクトのコードは、64 ビット システムで使用できるように更新する必要があります」(VBA 言語リファレンス)(2026年10月16日確認)
  3. Microsoft サポート「64 ビット版または 32 ビット版の Office を選択する」(2026年10月16日確認)
  4. Microsoft サポート「使用している Office のバージョンを確認する」(2026年10月16日確認)
  5. Microsoft Tech Community の Microsoft 社員の回答(2018年1月31日)「1707 included 64-bit support for the MSCOMCTL.ocx」(2026年10月16日確認)