如何设置具有两列的组合框的值?
Posted
技术标签:
【中文标题】如何设置具有两列的组合框的值?【英文标题】:How to set value of combobox with two columns? 【发布时间】:2020-07-21 22:49:40 【问题描述】:我正在使用未绑定的表单。我有一个名为PO_Number
的组合框和一个名为Vendor_Name
的组合框。在 PO_Number 的更新后事件中,我使用 PO_Number
并获取 Vendor_Name
。在 VBA 中,我尝试像这样设置组合框的值:
Vendor_Name.Value = rs!Vendor_Name
它运行,但文本没有显示在组合框中。
如何设置组合框的值?
更新事件后:
Private Sub PO_Number_AfterUpdate()
On Error GoTo ErrorHandler
Dim sql As String
Dim rs As DAO.Recordset
sql = "SELECT v.Vendor_Name, p.PO_Date, p.Description FROM PO as p INNER JOIN Vendor as v ON p.Vendor_Number = v.Vendor_Number WHERE p.PO_Number = " & PO_Number.value
Set rs = CurrentDb.OpenRecordset(sql)
If Not rs.EOF Then
rs.MoveFirst
Vendor_Name.Value = rs!Vendor_Name
PO_Date.value = rs!PO_Date
Description_Tb.value = rs!Description
End If
Exit Sub
ErrorHandler:
Err.Raise Number:=Err.Number, Description:=Err.Description
Exit Sub
End Sub
我查看了几个答案,所有这些都是针对 C# 或 VB.Net 的。
编辑: 我考虑使用文本框作为供应商名称,但我需要组合框,因为用户需要选择不同的供应商。
我还意识到我的Vendor_Name
组合框有两列。第一个存储Vendor_Number
,第二个存储Vendor_Name
。绑定列设置为 1 (Vendor_Name)。
如何设置两列组合框的值?
我想这样设置:
Vendor_Name.Column(0) = rs!Vendor_Number
Vendor_Name.Column(1) = rs!Vendor_Name
但它给了我:
运行时错误 424。 需要对象
【问题讨论】:
为什么需要设置带有供应商名称的组合框 - 为什么不只是一个文本框?包括供应商名称作为 PO_Number 的列,然后在文本框中按索引引用列中的表达式(索引以 0 开头):=PO_Number.Column(1)
。
@June7 刚刚更新了我的问题。我有一个解决方法,只需为旧供应商设置一个禁用的文本框值,并让组合框选择新供应商,但我想解决这个问题。
好吧,我很困惑。您使用的是 UNBOUND 表单吗?
@June7 我添加到我的问题和编辑部分的开头。希望这能让它更清楚。是的,它是不受约束的。 Vendor_Name 组合框有 2 个字段,1 个宽度为 0,绑定列设置为第二列,即供应商名称。问题中的更多详细信息。
那么你为什么要使用 UNBOUND 表单呢?我测试了将组合框设置为 Vendor_Number 并且可以工作。拉 Vendor_Number 而不是 Vendor_Name。确保组合框 ColumnWidths: 0";1".
【参考方案1】:
问题的根源是对 BoundColumn 属性的误解。 BoundColumn 不是从零开始的。
如果组合框 RowSource 为 SELECT Vendor_Number, Vendor_Name FROM Vendors;
且 BoundColumn 为 1,则它查看的是 Vendor_Number,而不是 Vendor_Name。
列索引从零开始。所以 Column(0) 指的是第一列。
需要使用 Vendor_Number 设置组合框 Value 属性,然后将显示关联的 Vendor_Name。
使用 BOUND 表单和 BOUND 控件,将需要更少的 VBA,并且这些复杂性都会消失。
【讨论】:
以上是关于如何设置具有两列的组合框的值?的主要内容,如果未能解决你的问题,请参考以下文章