↑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)で今のところ問題なく動いています。







