如何设置具有两列的组合框的值?

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,并且这些复杂性都会消失。

【讨论】:

以上是关于如何设置具有两列的组合框的值?的主要内容,如果未能解决你的问题,请参考以下文章

python:两列的组合

extjs:加载时如何设置组合框的值

如何在组合框中返回未绑定列的值

如何在组合框更改时设置数字列的值?

将组合框设置为另一个组合框的值 - Access Vba

如何在C#中获得组合框的所有选定值