0

だから私はID値をあるフォームから次のフォームに渡します

Docmd.OpenForm "SecondForm",,,,,, MainID
Docmd.Close AcForm, "FirstForm", acSaveYes

次に、2 番目のフォームの load イベントの値を確認します。

MainID = val(Me.OpenArgs)

デバッグしてステップスルーすると、これにカーソルを合わせると、値が含まれていることがわかります

次に、プロセスを繰り返すことになっている Second Form にボタンクリックイベントがありますが、次を実行すると

Dim rs as DAO.Recordset
Dim dbs as DAO.Database
Set dbs = CurrentDB

Set MyRS = dbs.OpenRecordset("tblMain")

If MyRS!MainID = MainID THen

その後、いくつかの rs.edit など....ルーチンはそこまで進んでいません。同じデバッグとホバーを実行すると、ここの値は空になります。フォームの読み込みイベントで値を確認できるため、不足しているものはありますか?別のアクションで使用しようとすると、MIA になります。

ありがとうジャスティン

4

1 に答える 1

1

これはスコープの問題のようです。MainID はどこで宣言されていますか?

Form Open プロシージャ内で宣言すると、そのプロシージャが終了すると消えます。

ボタンのクリック イベント プロシージャを変更することを検討してください。

If MyRS!MainID = Val(Me.OpenArgs) Then

フォームの読み込み後、OpenArgs は「消えません」。OpenArgs を MainID 変数に格納する必要がある理由がわかりません。MainID 変数を使用していた場所で Val(Me.OpenArgs) を使用できます。

または、MainID をモジュール レベルの変数にして、フォームのすべてのプロシージャで使用できるようにすることもできます。

更新: OpenArgs の値を入力せずにフォームを開く状況はありますか? その場合、Val(Me.OpenArgs) は 0 を返します。これは、アプリケーションのロジックでエラー状態になりますか? OpenArgs 値が指定されていない場合、コマンド ボタンを「クリック可能」(有効) にする必要がありますか?

于 2010-07-24T16:51:54.007 に答える