【发布时间】:2021-05-06 21:01:12
【问题描述】:
好吧,坦白说,这是一个很难描述的问题,而且我对 VBA 还很陌生。
我有一个带有命令按钮的“客户表单”,用于在“订单”中创建新订单。我可以获得将“订单”打开到新记录的按钮,但无法将“CustomerID”传递给“订单”组合框“CustomerID”。我需要“订单”来自动填充“客户表单”中的信息。
这是我尝试过的 VBA 代码:
Private Sub BtnNewOrder_Click()
DoCmd.OpenForm FormName:="Order Form", View:=acNormal, OpenArgs:=Me.CustomerID.Value
DoCmd.GoToRecord , , acNewRec
End Sub
Private Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
Me.CustomerID = Me.OpenArgs
End If
End Sub
我已经浏览网页好几天了,没有任何运气。我确定这个问题之前已经被问过,但我一直无法找到正确的解决方案。随意简单地指出我正确的方向。
【问题讨论】:
-
尝试始终明确您要分配给哪个属性,而不是让 VBA 来确定对象的 默认成员 是什么并隐式调用它:
CustomerID.Text = "value"是在编译时绑定的,它提醒读者CustomerID不仅仅是一个看起来的数值,它实际上是一个具有属性和方法的对象:它是一个 control 对象。CustomerIdBox = Me.OpenArgs行确实已经读得更好了,然后如果它读为CustomerIdBox.Text = Me.OpenArgs,我们就不会再对意图出错了。好的命名是成功的一半! -
@MathieuGuindon 感谢您的提示!我更改了控件对象名称并使用属性方法“.Text”取得了一些进展。现在它正在提取和放置正确的数据,但它正在尝试将“CustomerForm.CustomerIDBox”整数值与“OrdersForm.CustomerBox”中的可见字符串列进行匹配。绑定的“id”列被隐藏;我需要它来匹配 ID 而不是名称。这有意义吗?
-
那应该是
CustomerIdBox.Value,不是吗? -
@MathieuGuindon 当我尝试“.Value”或将 CustomerForm.Full_Name.Text 与 OrderForm.CustomerBox.Text (可见列)匹配时我没有收到错误,但值组合框不会改变。就好像什么都没发生一样。