Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何设置两列组合框的值?_Vba_Ms Access_Combobox - Fatal编程技术网

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

Vba 如何设置两列组合框的值?,vba,ms-access,combobox,Vba,Ms Access,Combobox,我使用的是未绑定表单。我有一个名为PO_Number的组合框和一个名为Vendor_Name的组合框。在订单号的更新后事件中,我使用订单号并获取供应商名称。在VBA中,我尝试如下设置组合框的值: Vendor_Name.Value = rs!Vendor_Name 它会运行,但文本不会显示在组合框中 如何设置组合框的值 更新事件后: Private Sub PO_Number_AfterUpdate() On Error GoTo ErrorHandler Dim sql As Strin

我使用的是未绑定表单。我有一个名为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的

编辑: 我考虑过使用文本框作为供应商名称,但我需要组合框,因为用户需要选择其他供应商

我还意识到我的供应商名称组合框有两列。第一个存储供应商编号,第二个存储供应商名称。绑定列设置为1供应商名称

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

我想这样设置:

Vendor_Name.Column(0) = rs!Vendor_Number
Vendor_Name.Column(1) = rs!Vendor_Name
但它给了我:

运行时错误424。 所需对象


问题的根源是对列属性的误解。BoundColumn不是从零开始的

如果组合框RowSource为Selectvendor\u Number,则从Vendors中选择Vendor\u Name;BoundColumn为1,则它查看的是供应商编号,而不是供应商名称

列索引是从零开始的。所以Column0表示第一列

需要使用供应商编号设置combobox Value属性,然后将显示关联的供应商名称


使用绑定表单和绑定控件,将需要更少的VBA,许多复杂问题将消失。

为什么需要使用供应商名称设置combobox?为什么不只是一个文本框?包括供应商名称作为采购订单编号列,然后文本框中的表达式按索引引用列,索引以0:=采购订单编号开始。列1。@June7刚刚更新了我的问题。我想到了一个解决办法,只需将禁用的文本框值设置为旧供应商,并使用组合框选择新供应商,但我想解决这个问题。好吧,我感到困惑。你使用的是未绑定表单吗?@June7我添加到我的问题和编辑部分的开头。希望这能让事情变得更清楚。是的,它是未绑定的。“供应商名称”组合框有2个字段,1个字段的宽度为0,绑定列设置为第二列“供应商名称”。问题中的更多细节。那么为什么要使用未绑定表单呢?我测试了将combobox设置为供应商编号和工作方式。拉取供应商编号而不是供应商名称。确保组合框的列宽为:0;1.