質問: Accessにて、フォーム上のテキストボックスをダブルクリックすると、別フォームの一覧から情報を取得する仕組みを作ろうとしたところ「実行時エラー'2465':アプリケーション定義またはオブジェクト定義のエラーです。」というエラーがVBAのコードで出てしまいました 今、「定食屋の売上」というAccessのデータベースがあります。 その中に「F_注文履歴」というフォームがあり、"カツ丼"や"親子丼"等のメニューが入っております。 このメニューは、手入力も可能なのですが。 別フォームから、情報を取得する仕組みを作りたいのです。 「F_注文履歴」フォーム内の「商品コード」という欄をダブルクリックしますと、「F_メニュー一覧」という別フォームが開くように、イベントプロシージャを設定しました。 そして開きました「F_メニュー一覧」フォームに「かつ丼」「とんかつ定食」等のメニューがありますので。 該当するメニューを選んで「選択」ボタンを押下すると。 そのメニューの情報が「F_注文履歴」フォーム内に記入されるという仕組みなのですが...「実行時エラー'2465':アプリケーション定義またはオブジェクト定義のエラーです。」が、出てきてしまいました。
回答: コメントより回答追加 > Forms("F_メニュー一覧").OpenArgs > > と、「.OpenArgs」が後ろに付くと、なぜ呼び出し元親フォームである「F_注文履歴」に、変化したのでしょうか...。 > 引数を指定して、とありましたが、引数とは今回の場合、どれを指しているのでしょうか。 > > !f:id:ken3memo:20200924001227j:image ダブルクリック時のコード OpenFormのパラメーターで渡していると思いますが・・・ Private Sub 商品コード_DblClick(Cancel As Integer) DoCmd.OpenForm "F_メニュー一覧", , , , , , "F_注文履歴" End Sub で開くと、 開かれた一覧の方で .OpenArgs を参照することで、 渡された"F_注文履歴"を取り出すことができます。 なので、 Forms(Forms("F_メニュー一覧").OpenArgs).Form.商品コード.Value = menucode は Forms("F_注文履歴").Form.商品コード.Value = menucode となり、 無事に親フォーム・呼び出し元のフォームに値をセットできる。 そんな仕組みだと思います。 ダブルクリック(呼び出しもとで、セット先を指示したいので、) FormOpen時のパラメーターとして、渡してあげる。 渡された方は、 .OpenArgs で、値を取り出せる。 回答No2のごろえもんさんが書かれていますが、 自分のフォームなので Forms("F_メニュー一覧").OpenArgs は Me.OpenArgs の方が、自分にOpen時に渡されたパラメーターってことで、コードも見やすいかも。 話を戻すと、 DoCmd.OpenForm これのパラメーターで渡されていると思います。 > OpenArgs 省略可能 バリアント型 文字列式。 この式は、フォームの OpenArgs プロパティを設定するために使用されます。 この設定は、Open イベント プロシージャなどのフォーム モジュールのコードで使用可能です。 OpenArgs プロパティは、マクロや式でも参照できます。 > > DoCmd.OpenForm "F_メニュー一覧", , , , , , "F_注文履歴" ↑の一番後ろで指定しています。