【移行ガイド】OO4O→ADOに移行する際のフォーム関数の呼び出し方の違いと注意点

✅ はじめに

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 フォーム関数 呼び出し タイミング