旧バージョンで作られたAccess(拡張子がmdb)を使い続けたいと思っていても、PCの買い替えに伴い
「動かなくなった」
「エラーが出るようになった」
ということが発生し、使いたくても使えないという状況が発生します。
大抵はOSがバージョンアップしたこと、Officeのバージョンが変わったこと、Officeが32bit版から64bit版に変わったこと、のどれか、もしくは複数が組み合わさって動かなくなったりエラーが出たりということが発生します。
これは当然のことで、元々のAcccessが作られた時の動作環境と、今動かそうとしている動作環境が変わっているので、「何も変えていないのだから動くはず」と考えてしまうはそもそもが間違っているとも言えます。
とはいえ、今まで慣れ親しんでいたAccessシステムが急に動かなくなると困ってしまいますので、どうにか動かせるように対応が必要になります。
関連記事に書いてあるように対応していけば最新のPC環境で動かせるようになりますが、この対応を行ってもエラーが解決しない場合というのがたまーにあります。
そんな時に試したいのが、Accessデータベースのインポート です。
そこで今回は、旧バージョンのAccessシステムを新バージョンとして動かそうと修正しているものの、どうしても不明なエラーが出て原因が分からず先に進めない場合の手段の一つとして試してもらいたい、Accessデータベースのインポートについてまとめてみました。
つぎにあるようなエラーメッセージが発生し、かつ調べてみても原因が分からないような場合、この方法を行うことでエラーが解消するかもしれません。
原因不明なエラーとは
発生したエラーメッセージ
ファイルの拡張子をmdb→Accdbに変換して、Win32APIを64bit環境で動かせるように変えて、一通り動作確認してみた際に、次のようなエラーが発生する処理がありました。
2501 OpenReportアクションの実行は取り消されました
エラーの発生個所を見てみると、どうやらDoCmd.OpenReportコマンドでレポートを起動している箇所でエラーが出ているようでした。
そこで対象のレポートを直接起動してみると、今度は違うメッセージが出てきました。
OLEサーバまたはActiveXコントロールと通信しているときにエラーが発生しました。
メッセージを見てもよくわからないので、時間がかかりそうだなと予感しました。
エラー原因の調査
ひとまず「イベント プロパティに指定した式 開く時 でエラーが発生しました」という記載があるので、Report_Openイベントの処理を見てみました。
しかし・・・何も処理がありません。
関数の定義はありましたが、中身は空。なのでイベントが呼ばれても何も処理はしていないはずなのですが、エラーが出ている、という状況でした。
どうやら、開く時のイベントではエラーが出ておらず、別な部分でエラーが出ているようです。
次に、開く時のイベントは関数を呼び出さないようにしてみました。
すると、先述の「OLEサーバまたはActiveXコントロールと通信しているときにエラーが発生しました。」エラーは出なくなりましたが、今度はレポート内で使用しているクエリのパラメータにうまく値が渡っていないようで、変数名にパラメータの入力を促すダイアログが出るようになりました。
今までと処理は変えていませんし、ソースを見る限りだとパラメータの私も確実に行われているようでした。
原因が特定できず手詰まりに・・・。
これは困ったなと色々と調べた結果、おそらく・・
ファイルの拡張子をmdbからaccdbにしても、旧バージョンAccessの何かが残っていて、新バージョンAccessで動作させる際に悪影響を及ぼしているのではないか
という仮説に至りました。
検証するにはAccessファイルを新規作成して、旧バージョンと同じようにフォームやレポートを1から作り直して、コードはコピペして・・・ということを行うしかないのかと想像したら気が重くなったのですが、そんなことをしなくても新Accessファイルに旧Accessファイルの内容をインポートできるボタンがありました。
それがAccessファイルのインポート機能です。
Accessファイルのインポート方法
Accessファイルのインポート方法をググっていたところ、まさに今回私が困っていたエラーと同じような現象をAccessファイルのインポートを行うことで解消したというサイトが見つかりました。
https://nyanblog2222.com/office/access/2541/
基本的に上記サイトの手順に沿って行えばAccessファイルのインポートを行うことができます。
Accessデータベースのインポート時の注意点
Accessデータベースのインポートをすることで、テーブル、クエリ、フォーム、レポート、マクロ、モジュールは旧ファイルから新ファイルに移動することができます。ただし、
- プロジェクト名
- 現在のデータベースの設定
についてはどうやら移動がされないようでした。そのため、この2つについてはインポート後に手動で設定をする必要があります。
プロジェクト名については、リボンの「データベースツール」から「Visual Basic」を選択することで、VBAエディタを表示することができます。
プロジェクトをクリックするとプロパティーにプロジェクト名が表示されますので、ここから設定を変更します。(特に気にしない場合は変更しなくてもよいかと思います)
現在のデータベースの設定は、Accessのリボン→ファイル→オプション→現在のデータベース から行います。
おそらく必須となるのが、「アプリケーションタイトル」「フォームの表示」の設定です。
インポート直後は「フォームの表示」が空欄になっているため、起動しても何も処理が動きません。そのため、旧ファイルの設定を見ながら、新ファイルも同じように設定をしていきます。
まとめ
今回はAccessデータベースのインポートについてまとめてみました。
mdbからaccdbにファイル形式を変えて実行した際に「OLEサーバまたはActiveXコントロールと通信しているときにエラーが発生しました。」のようなエラーが発生して原因が特定できない場合は、Accessファイル内に旧バージョンの情報や処理が残っていて何かしら悪影響を及ぼしているかもしれません。
そのような場合は、今回ご紹介したAccessデータベースのインポートを利用して、Accessファイル自体を作り直すことを試してみましょう。ひょっとするとエラーが解消するかもしれませんよ!
また、この記事に書いたようなちょっとした困ったことでも、自分に経験や知識が足りないために対応できなかったり、時間をかけたわりに全然進まなかったりと、思うようにいかない事ってありますよね。そんなときは専門家に相談したり解決してもらったりする方法もありますので、一人で悩まず対処してみましょう。