0

ボタンをクリックすると、リスト ボックスに値を含む別のフォームが開くメイン フォームが 1 つあります。私が望むのは、値の 1 つをクリックして、その値を他のフォームのテキスト ボックスに入力することです。

私はいくつかの異なる方法を試しましたが、これは私が現在取り組んでいるものです。

メインフォーム:

Private Sub txtFindInvoice_AfterUpdate()
    If IsNull(Me.OpenArgs) = False Then
        txtFindInvoice = strSelectedInvoice
    End If
End Sub

2 番目の形式:

Private Sub lstInvoices_Click()
    DoCmd.OpenForm "SummaryByInvoice1", acNormal, , , , , lstInvoices.Value
    Forms!SummaryByInvoice1.Refresh
    DoCmd.Close acForm, "frmSearchByMonth"
End Sub

メイン フォームは「SummaryByInvoice1」で、開くフォームは「frmSearchByMonth」です。テキスト ボックスは txtFindInvoice で、リスト ボックスは lstInvoices です。

つまり、SummaryByInvoice1 のコードでここで設定した OpenArgs 値を参照しても、フォームは実際には再オープンされていないため、OpenArgs はまだ空白として読み取られているということです。

frmSearchByMonth を開いたときに SummaryByInvoice1 を閉じてみましたが、これで問題は解決しました。ただし、frmSearchByMonth は大量のデータからプルし、読み込みが少し遅いため、これは実行可能なオプションではありません。したがって、数秒間空白の画面を表示することはできません。クローズを数秒遅らせる方法があれば、うまくいく可能性があります。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

フォーム間でデータを移動する方法をたくさん試しました。openargs には問題が多すぎます。

呼び出し元のフォーム名を取得するためだけにフォーム間で情報を使用していると、はるかに簡単になります。次に、そこにある呼び出しフォームのほぼすべての情報にアクセスできます。必要に応じて、コンボ ボックスやリスト ボックスの更新、テキストの変更、再クエリなどを行うために、呼び出し元のフォームにデータをプッシュすることもできます。

Private Sub Form_Load()

    Set frmPrevious = Screen.ActiveForm

    Me.tbText.value = frmPrevious.cbPassTest.value

End Sub

そのコードを呼び出しているフォームの LOAD() に入れれば、必要なものを引き出すことができます。

于 2013-02-12T01:01:31.757 に答える