Topへ

開発ブログ

Accessラインタイムの要否とインストールbit数判定スクリプト

Microsoft-Accessはaccdb形式で実行するケースとaccde(コンパイル)形式で実行する場合で、実行可能環境が異なります。

accdb形式であれば、os及びofficeのbit数が32bitであろうと、64bitであろうと実行することが可能です。

ですがaccde形式の場合、MS-Accessの32bitがインストールしてあるマシンでコンパイルすると32bitモードでコンパイルされ、64bitがインストールされているマシンでコンパイルすると64bitモードでコンパイルされます。
64bitモードのaccdeファイルは32bitのofficeでは実行できませんし、32bitモードののaccdeファイルは64bitのofficeでは実行できません。

accdeファイルに変換するとどうなるかといいますと
・フォームの修正
・レポートの修正
・VBAコードの変更
ができなくなります。

OS及びインストールOfficeのbit数によって、アクセスランタイムとaccdeのbit数判定マトリックス

office

インストール

有無

access

バンドル有無

osの

bit数

officeの

bit数

Access

ランタイム

accdeファイル

あり

あり

32bit版

32bit版

不要

32bit版

あり

あり

64bit版

32bit版

不要

32bit版

あり

あり

64bit版

64bit版

不要

64bit版

あり

無し

32bit版

32bit版

32bit版

32bit版

あり

無し

64bit版

32bit版

32bit版

32bit版

あり

無し

64bit版

64bit版

64bit版

64bit版

無し

無し

32bit版

-

32bit版

32bit版

無し

無し

64bit版

-

64bit版

64bit版

無し

あり
32bit版

32bit版

-
 

不要

32bit版

無し

あり
64bit版

64bit版

-
 

不要

64bit版


※Office 2019以降のバージョンのインストールでは、 明示的に 32 ビット版を選択しなければ、64 ビット版の Office が自動的にインストールされます。

●判定バッチファイル
予約管理システムをaccdeファイルと読み替えてください。
以下の内容をコピーして拡張子をbatにして実行すると、必要なプログラムのbit数が判定できます。

@echo off

set isAccessExist=0
set officebit=0
rem ===== OSのbit数判定(共通プログラムフォルダ変数が空ならx86、それ以外ならx64)=====
call :osBitCheck

rem 予約システム(tineyReserve)インストール往路グラムのBit数判定と必要なランタイムモジュールの判定  updatedate 2022/02/03
rem 下記の例では拡張子.docxで判断している(officeには必ずwordが付いているため)
rem 関連付け判定  Wordなら .docx  Excelなら .xlsx Accessなら.accdb
rem assocでファイルタイプはWord.Document.12とわかり
for /f "tokens=2 delims==" %%a in ('assoc .docx') do @set workrel=%%a
rem ftypeでWord.Document.12に対応した起動アプリのフルパスがわかる"C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE" /n "%1" /o "%u"
for /f "tokens=2 delims==" %%a in ('ftype %workrel%') do @set workpath=%%a

rem ==== Officeインストール判定 (wordが無ければofficeはインストール無しと見なす)=====
echo %workpath% | find /i "winword.exe" > nul
if %errorlevel% geq 1 goto notExistOffice

rem officeのbitcheck
call :officeBitCheck
call :accessCheck
if %isAccessExist%==1 (
  goto existAccess ) else (
  goto notExistAccess
)

:accessCheck
rem -------------------------------------------
rem accessがインストールされているかチェック
rem -------------------------------------------
for /f "tokens=2 delims==" %%a in ('assoc .accdb') do @set workrel=%%a
for /f "tokens=2 delims==" %%a in ('ftype %workrel%') do @set workpath=%%a
echo %workpath% | find /i "msaccess.exe" > nul
if %errorlevel%==0 (
   rem Accessインストール
   set isAccessExist=1
) else (
    rem Access未インストール
    set isAccessExist=0
)
call :officeBitCheck
exit /b

:osBitCheck
rem -------------------------------------------
rem OSビット数チェック
rem -------------------------------------------
echo %PROCESSOR_ARCHITECTURE% | find /i "x86" > nul
if %errorlevel%==0 (
    set bit=32
) else (
    set bit=64
)
exit /b

rem -------------------------------------------
rem Officeビット数チェック
rem -------------------------------------------
:officeBitCheck
rem ===== OSが32bitなら強制的にofficebitも32bitに設定 =====
if %bit%==32 (
    set officebit=32
    exit /b
    )
echo %workpath% | find /i "%ProgramFiles(x86)%" > nul
if %errorlevel%==0 (
       set officebit=32
 ) else (
       set officebit=64
 )
exit /b

rem ===== OfficeがインストールされているがAccessは含まれない場合 =====
:notExistAccess
echo ====================================================================================
echo %officebit%bit版ランタイムモジュールををダウンロード&実行してから、予約管理システム(tinyReserve:%officebit%bit版)をダウンロード&実行してください。
rem 2022/02/02現在 access365ランタイムがダウンロードできないため Access2016ランタイムのページを表示
rem start https://www.microsoft.com/ja-jp/download/details.aspx?id=50040
echo ====================================================================================
pause
exit /b

rem ===== Officeがインストールされていない場合 =====
:notExistOffice
call :accessCheck
rem OfficeがインストールされていなくてAccess単体でインストールされている場合
if %isAccessExist% == 1 goto existAccess
echo ====================================================================================
echo %bit%bit版ランタイムモジュールををダウンロード&実行してから、予約管理システム(tinyReserve:%bit%bit版)をダウンロード&実行してください。
rem 2022/02/02現在 access365ランタイムがダウンロードできないため Access2016ランタイムのページを表示
rem start https://www.microsoft.com/ja-jp/download/details.aspx?id=50040
echo ====================================================================================
pause
exit /b

rem ===== Office&Accessがインストールされている場合 =====
:existAccess
echo ============================================================================
echo 予約管理システム(tinyReserve:%officebit%bit版)のみをダウンロード&実行してください。
echo ============================================================================
pause
exit /b