正常に動いていたAccessファイルが、突然 「Microsoft AccessがOLEサーバーまたはActiveXコントロールと通信しているときにエラーが発生しました」 とエラーメッセージが出て使えなくなってしまった場合の対処方法を紹介します。
エラーの原因は?どんな状況で発生する?
エラー原因
調べてみると、対象のAccessファイルのフォーム等に何かしらの不具合があることが原因のようでした。
ただ、「これが原因!」というのは判別しづらいようですね。
どんな状況で発生するか
色々なパターンがあるようですが、
主にAccessファイルを作成したパソコンと異なるパソコンで使用すると起きるようです。
参考として、私は以下の状況でエラーが発生しました。
- 社内のパソコンリプレース
- パソコン交換後、Accessのフォーム画面でボタンを押した際にエラーメッセージが出た
- 新旧パソコンの環境
旧パソコン:Windows7 32bit、Microsft Access 2013
新パソコン:Windows10 64bit、Microsft Access 2019 64bit - 全てのAccessファイルでエラーが出たのではなく、多数ある中の一つだけ
- Microsft Access 2019 32bitでも試してみたので、Officeのbit数の問題ではなさそう
これは私の想像になりますが、新パソコンのチェック機能の強化により、旧パソコンではチェックされていなかった不具合が表に出てきてしまったのかもしれません。
新しいパソコンだと性能はもちろんセキュリティなども強化され、昔できていたことができなくなることはよくあることだからです。
対処方法・注意事項
対処方法
対処方法は「新しいAccessファイルを作り、元のAccessファイルから全ての情報をインポートする」です。
(説明する際の画像はMicrosoft Office 2010のものですが、手順自体はMicrosoft Office 2019でも同じです)
詳細な手順は以下になります。
(前準備)拡張子がmdbの場合は、accdb変換
必須ではありませんが、mdbはいつか使えなくなる危険性があるのでこのタイミングで変換しておいた方が無難です。
例)CSVインポート.mdb→CSVインポート.accdb
変換した場合はショートカットはもちろん、Accessファイルが他のAccessファイルからリンクテーブルとして参照されている場合、リンク先が変わってしまうためご注意ください。
1.対象のAccessファイルが入っているフォルダと異なるフォルダで右クリックし、 新規作成からMicrosoft Access データベースをクリック
2.新規作成されたAccessファイルを、対象のAccessファイルと同じ名前とする
例)「新規 Microsoft Access データベース.accdb」を作成し、「CSVインポート.accdb」にリネーム
3.2で作成したAccessファイルを開き、外部データタブからAccessデータベースのインポートを選択
4.対象のAccessファイルをクリックして、OKを押すと「オブジェクトのインポート」画面が出るので、オプションをクリック
5.オプションで出てきたチェック項目を全てチェックする
6.全てのタブ(テーブル・クエリ・フォーム・レポート・マクロ・モジュール)ですべて選択をクリックし、OKをクリック
7.Accessファイルを閉じて、元々のAccessファイルのフォルダに移し替える。
※元々のAccessファイルは念のため名前を変えてバックアップとして残しておいてください。
これでAccessファイルの作り直しは完了です。
インポート中に何かしらエラーで取り込めないものがありますが、
恐らく何かしら問題のあるオブジェクトがほとんどですので、
基本不要なものなので気にしなくてもいいかと思います。
ただ、 念のためそのオブジェクトが使われていないかはインポート後に確認して、
必要であれば個別に対象のAccessファイルからコピペしてきてください。
注意事項
上記方法では、VBAのプロジェクト名は引き継がれないので注意してください。
例えば、DAOを使ってテーブル操作をする場合は、Databeseオブジェクトの変数を宣言していたりしますが、その場合、被らないようにプロジェクト名をあえて固有の名前に変えていたりします。
その場合、インポート後に手で直してください。
↓