32ビットAccessプログラムを動かす | virt_flyのブログ

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

↑Microsoft 365で32ビットのAccessファイルを開いたら、コンパイルエラーを示して動かなくなった

Microsoft 365 Personalをインストール

 

●被団協のノーベル賞受賞を祝します

 

本題とは関係がないのですが一言。

 

日本原水爆被害者団体協議会のノーベル平和賞受賞をお慶び申し上げます。

 

被爆二世なもので嬉しさひとしおです。被爆者の多くが亡くなり、各県での会の活動が困難になっていると聞いて久しいですが、何もお手伝いできていないことを恥ずかしく思います。核兵器の即時廃絶、世界平和へつながることを願ってやみません。

 

●インストールしたはずのAccessが見つからない

 

今回は、MicrosoftのデータベースアプリAccessにかかわる話です。

 

Accessを使う必要にせまられて、Microsoft 365 Personalをインストールしました。

 

いうまでもなく、Microsoft 365は買い切り型でなくサブスクリプション型。期間を限って使用する権利を買うというのは、古い人間にとっては現物がないのに金が払えるか、ととて受け入れがたいもので、これまではスルーしてきました。

 

とはいえ、永続版のAccessを買うとなれば結構高額で、そんなことなら何台の端末にもインストールが可能なサブスクリプション型にし、好きな時に止めたらいいじゃないかと、ついに節を曲げることになったものです。

 

なお購入は、Microsoftから手に入れるより安いAmazonの1年版にしました。

 

いくつもバージョンのあるアプリのインストールってわかりにくいのですが、Microsoft 365 Personal 1年版についても少々まごつきましたが、なんとかインストール。と思ったらAccessが見当たりません。

 

メニュー画面に生成したMicrosoft 365(Office)のアイコンをクリックして開いた画面には、WordやExcel、PowerPointなどのアイコンがあるのに、なぜかAccessがないので激しく動揺。

 

実際には、メニュー画面の[すべてのアプリ]をクリックして開いたリストのなかに、Accessはちゃんとありました。Accessは別扱いなのですね。紛らわしいことをしてくれるものです。

 

ここまでは、毎度当ブログおなじみの「なんと驚いた」パターンですが、今回は想定外のサプライズがこの後にまだ控えていました。

 

●エラーの原因と対処

 

高い金を支払ったというのにAccessがない、と肝を冷やしたばかりですが、今度はそのAccessでmdbファイルを開いたところ、コンパイルエラーが表示されて動かないのです。愕然となりました。

 

Office(Access)はかつて32ビットしかなく、Office2010以降のインストーラーに32ビット版と64ビット版が同梱されるようになって、Office2016までは32ビット版が自動インストール、64ビット版は従扱い、Office2019から64ビット版のインストールが主に変わったんだとか。

 

今回エラーが起きたのは、64ビット版のAccessで32ビットAccessプログラムを動かそうとしたからです。32ビット版のAccessにてVisual Basicで書いたモジュールがエラーを起こすようです。テーブルやクエリーだけなら問題はありません。

 

①Accessプログラムを32ビット版Accessで動かす

 

慌てましたが、インストール時に32ビット版か64ビット版かを選択することができるということなので、何台でもインストールできるOffice 365の利点を生かし、とりあえず別なパソコンに32ビットでOffice 365をインストールしました。結果、従来型の32ビットAccessプログラムであるmdbファイルは、無事動かすことができました。


32ビットAccessプログラムは、次に示す64ビット対応に書き換える方法をとるより、不測の事態を招かぬようそのまま32ビット版Accessで動かす方が無難かもしれません。

 

②Accessプログラムを64ビット対応に

 

64ビット版Accessで32ビットAccessプログラムがエラーを起こすのは、プログラムの書き方が32ビット版Access向けだからなんだそうです。

 

Accessでは「Windows API」という機能を使用しており、その機能を呼び出すための宣言方法を64ビット版に改めれば、エラーは解消されるはずだということ。

 

今後、AccessをはじめOfficeは64ビット版を使うことがもっぱらと思われますから、32ビットAcⅽessプログラムも64ビット版対応に書き換えて使いたくなりますよね。

 

その方法は、該当する各モジュールの冒頭部分にあるDeclareステートメントにPtrSafe属性を設定すること。具体的にはDeclare Function …あるいはDeclare Sub …となっている箇所を、DeclareのあとにPtrSafeを挿入するよう、Accessで検索しすべて置換します。

 

 

なお、置換の際は現在対象となっているモジュールだけでなく、該当するモジュールがもれなく書き換えられるように、Accessで開いた置換のダイアログボックスの[カレント プロジェクト(C)]にチェックを入れておきます(画像参照)。

 

たったこれだけで、完了です。

 

結果、64ビット対応させたAccessプログラムは、Microsoft 365(Access)で今のところ問題なく動いています。