MS Access VBA以单独的形式从列表框填充文本框

时间:2013-02-11 21:48:44

标签: forms vba ms-access listbox

我有一个主要表单,当您单击一个按钮时,它会在列表框中打开另一个带有值的表单。我想要的是单击其中一个值并使该值填充另一个表单中的文本框。

我尝试了几种不同的方法,这就是我目前正在尝试开始工作的方法。

主要形式:

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

第二种形式:

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从大量数据中提取并且加载速度有点慢。因此,我几秒钟就不能有空白屏幕。如果有办法延迟关闭几秒钟,那可能会有效。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我尝试了很多方法在表单之间移动数据。 openargs有太多问题。

当我在表单之间使用信息来拉取调用表单名称时,我发现它更容易。然后,我可以访问调用表单上的几乎所有信息。如果需要更新Combo或List框,更改文本,重新查询等,我还可以将数据推送回调用表单。

Private Sub Form_Load()

    Set frmPrevious = Screen.ActiveForm

    Me.tbText.value = frmPrevious.cbPassTest.value

End Sub

将该代码放入您正在调用的表单的LOAD()中,然后您可以将所需内容拉出来。