【问题标题】:MS Access: Pass Value from Form Textbox to Another Form Combo Box on a New Record?MS Access:将值从表单文本框传递到新记录上的另一个表单组合框?
【发布时间】:2021-05-06 21:01:12
【问题描述】:

好吧,坦白说,这是一个很难描述的问题,而且我对 VBA 还很陌生。

我有一个带有命令按钮的“客户表单”,用于在“订单”中创建新订单。我可以获得将“订单”打开到新记录的按钮,但无法将“CustomerID”传递给“订单”组合框“CustomerID”。我需要“订单”来自动填充“客户表单”中的信息。

客户表单:

订单:

客户组合框显示客户全名,但绑定到客户 ID

这是我尝试过的 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 (可见列)匹配时我没有收到错误,但值组合框不会改变。就好像什么都没发生一样。

标签: vba ms-access ms-office


【解决方案1】:

您必须使用表单加载事件。开启活动太早了。

在打开事件时 - 允许测试控件和值 - 您可以设置 cancel = true 并且不会加载表单。因此,on open 用于检查/测试是否要让表单打开,基于检查事物的自定义代码。如果您不想加载表单 - 您可以设置 Cancel = true。

加载事件: 这是您的设置代码、设置变量、可能的设置控件等发生的地方。因此,您无法在 on-open 中修改控件 - 事件太早,但您可以在 on-load 事件中修改表单控件和值。

【讨论】:

  • 我已经切换到加载事件,并且像@MathieuGuindon 提到的那样更改了命名。但是,我仍然遇到问题。尝试将 CustomerForm 中的数字 CustomerID 与 OrderForm 上的 CustomerBox 匹配会出现错误:“您输入的文本不是列表中的项目。” ComboBox 是绑定到 CustomerID 的两列查找(CustomerID,Full_Name),但 CustomerID 以 0" 列宽隐藏。这就像 Access 试图将 CustomerIDBox 数据与 Full_Name 列表匹配。
  • 作为一般规则,访问确实使用组合框的文本。这就是设置,它将为您转换为 ID。所以使用 MyComboBox.Text = "some text to set",或者你可以使用 id,并使用 .Value 像 MyComboBox.Value = 55 --- 所以 .Value 或 .Text 是你在设置文本或 id 值之间进行选择的方式.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多