Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 - Fatal编程技术网

Vba 访问:列表框选择添加到表

Vba 访问:列表框选择添加到表,vba,ms-access,Vba,Ms Access,所以我的数据库非常简单,是一个列表框“ListItems”,它包含一系列不同的产品,用户在其中选择并输入产品数量。但是,为了从效率的角度帮助用户,添加了一个搜索框,以防止用户必须从5万个项目中找到正确的产品 当用户输入时,选择顶部记录 Private Sub txtSearchItems_Change() ListItems.Requery If Me.ListItems.ListCount > 0 Then Me.ListItem

所以我的数据库非常简单,是一个列表框“ListItems”,它包含一系列不同的产品,用户在其中选择并输入产品数量。但是,为了从效率的角度帮助用户,添加了一个搜索框,以防止用户必须从5万个项目中找到正确的产品

当用户输入时,选择顶部记录

Private Sub txtSearchItems_Change()
        ListItems.Requery

        If Me.ListItems.ListCount > 0 Then
            Me.ListItems.Selected(0) = True
        End If
End Sub
但是,如果用户没有实际单击列表框中的选定行,则在运行以下代码时,该项将添加到表中,而不包含任何项

    Dim RST As DAO.Recordset

    Set RST = CurrentDb.OpenRecordset("select * from UptimeItems")

    If IsNull(txtQuantityProd) Or txtQuantityProd = "" Then
        MsgBox "Please enter a quantity produced.", vbExclamation
        txtQuantityProd.SetFocus
        End
    End If

    '\\Checkbox For If is Press
    Check95.Value = False

    If DLookup("[IsPress]", "Machines", "[MachineName] = Location") = -1 Then
        If DLookup("[MoreThan1Blank]", "LintelInfo", "[No] = ListItems") = -1 Then
            Check95.Value = True
        End If
    End If
    '//

    With RST
        .AddNew
        !RecordID = RecordID
        !Product = ListItems
        !Quantity = txtQuantityProd
        !MoreThan1Blank = Check95
        .Update
    End With

    RST.Close
    Set RST = Nothing

    Forms![UptimeAARecord]![UptimeItems].Requery
    Call ClearFields

正如您可以看到的顶部记录,用户没有选择列表框中的行,因此除了数量之外没有添加任何数据,但是用户使用了“100 900mm框”,因此添加了数据


如何解决此问题?

如果列表框的“多选”属性设置为“无”,则可以通过设置值来选择项目:

Private Sub txtSearchItems_Change()
    ListItems.Requery
    With Me.ListItems
        If .ListCount > 0 Then
            .Value = .Column(.BoundColumn, 0)
        End If
    End With
End Sub
这可确保在后续代码中使用value属性时该属性具有有效值


如果允许多选,则添加条目的代码可能需要进一步调整。

!Product=ListItems
是错误源,您需要检查
列表框。listindex
可能是,或者在单击之前是否选择了任何项目。非常感谢Erik,这非常有效。我发现唯一缺少的是该行没有突出显示,因此只需在您的建议中添加“Me.ListItems.Selected(0)=True”即可产生完美的结果。再次非常感谢您的帮助!听起来仍然有一些奇怪的事情发生,因为这段代码应该选择行(至少在我的版本中是这样)。但是嘿,如果它没有坏。。。