✅ はじめに
Microsoft Accessを使った業務アプリケーションでは、かつてOO4O(Oracle Objects for OLE)がデータアクセス手段として広く使われていました。
しかし現在ではADO(ActiveX Data Objects)やDAOなどの接続方式が主流となり、OO4OからADOへの移行を検討・実施している企業や開発者も増えています。
移行の際、真っ先に注目されるのは「データベース接続部分」ですが、実はフォームの呼び出し方法にも仕様の違いがあり、注意が必要です。
この記事では、OO4OとADOで異なるフォーム呼び出しの方法について詳しく解説し、移行時に避けるべきトラブルや対処法を紹介します。
■ OO4O環境では簡単だったフォーム呼び出し
OO4Oを使っていた環境では、すでに開いているフォームに対して直接関数を呼び出すだけで済むのが一般的でした。
OO4O環境でのコード例:
Call Forms.フォーム名.関数名
Accessは自動的にフォームを探し、インスタンスにアクセスしてくれます。
特に、常に表示された状態のフォームやメニュー画面から呼び出すような構成では、非常にシンプルで扱いやすい書き方でした。
⚠ ADO環境ではこれだけでは不十分
ADOに移行した環境では、フォームが明示的に開かれていないとFormsコレクションに存在しないため、上記コードではエラーになります。
ADO環境での正しい手順:
DoCmd.OpenForm "フォーム名"
DoEvents
Call Forms("フォーム名").関数名
■ 各ステップの解説:
- DoCmd.OpenForm: フォームを明示的に開くことで、メモリ上にインスタンスを作成
- DoEvents: フォームが表示されるまでの時間を確保
- Forms(“フォーム名”): インスタンス化されたフォームに対して関数を実行
■ 移行時に必要な修正ポイントまとめ
項目 | OO4O環境 | ADO環境(推奨) |
---|---|---|
フォーム呼び出し | Forms.フォーム名.関数名 | DoCmd.OpenForm → DoEvents → Forms(“フォーム名”) |
フォームの存在確認 | 不要 | 必要(明示的に開く) |
処理の同期 | 暗黙的に完了 | DoEventsで同期を確保 |
エラーハンドリング | 最小限 | If CurrentProject.AllForms("フォーム名").IsLoaded Then などの検討が必要 |
■ 実装例:フォームを開いて関数を呼び出す
Sub RunHiddenFormProcedure()
' フォームを開く
DoCmd.OpenForm "フォーム名"
' フォームの初期化完了を待つ
DoEvents
' 関数を呼び出す(フォームのパブリック関数を実行)
Call Forms("フォーム名").関数名
' 処理が終わったらフォームを閉じる(必要なら)
DoCmd.Close acForm, "フォーム名"
End Sub
この方法を使えば、ユーザーに画面を見せずにフォーム経由で処理を実行し、終了後に自動的にフォームを閉じることができます。
バックグラウンドでの処理実行や一時的なフォーム利用に最適です。
■ フォームを非表示にしたい場合
Sub RunHiddenFormProcedure()
' 非表示でフォームを開く
DoCmd.OpenForm "フォーム名", WindowMode:=acHidden
' フォームの初期化完了を待つ
DoEvents
' 関数を呼び出す(フォームのパブリック関数を実行)
Call Forms("フォーム名").関数名
' 処理が終わったらフォームを閉じる(必要なら)
DoCmd.Close acForm, "フォーム名"
End Sub
OpenFormのうしろにWindowMode:=acHiddenをつけるだけでフォーム非表示の状態で関数を呼ぶことができます。
■ まとめ
OO4OからADOへの移行において、データ接続部分だけでなく、フォーム呼び出しの方法にも明確な違いがある点は見逃されがちです。
- ADO環境ではフォームは自動で開かれない
- DoCmd.OpenForm + DoEvents + Forms()という3ステップが安全
- 移行後にフォーム呼び出しで「オブジェクトが見つかりません」エラーが出るのはこの違いによるもの
既存コードをそのまま流用するとエラーに繋がる可能性があるため、フォームの呼び出しロジックを見直すことが、安定したシステム移行の鍵となります。
■ 関連記事
■ 関連キーワード
- Access フォーム 呼び出し 違い
- VBA DoCmd.OpenForm 使い方
- Forms コレクション エラー 対処法
- OO4O ADO 移行 注意点
- Access フォーム インスタンス化
- VBA フォーム関数 呼び出し タイミング