我才刚刚开始更深入地研究VBA,遇到了我不了解的事情。我正在为维修店建立一个零件数据库,作为知识库和购买工具。我有一个表格可以在数据库中搜索需要订购的零件(“ frmPartSearch”)。如果他们知道供应商部件号,则我有一个弹出式表单(“ frmVendorPNLookUp”)搜索要供用户批准的匹配项,然后我想在他们单击命令按钮时将该记录复制到主表单中。frmPartSearch有两个组合框来选择零件的分类和系列,在列表框控件源的标准中使用它们来仅显示具有该分类/系列名称的零件。列表框控件源是:SELECT tblPart.chrPartNumber , tblPart.chrDescription , tblKnowledgeBase.idsKBFROM (tblFamilyRIGHT JOIN tblPart ON tblFamily.idsFamily = tblPart.lngFamilyId)LEFT JOIN tblKnowledgeBase ON tblPart.idsPart = tblKnowledgeBase.lngPartIdWHERE (((tblPart.chrDescription) Like "*" & [Forms]![frmPartSearch]![txtKeywordSearchCriteria] & "*")AND ((tblFamily.lngClassificationId) =[Forms]![frmPartSearch]![cboClassificationSelection])AND ((tblFamily.chrFamilyTitle) =[Forms]![frmPartSearch]![cboFamilySelection]));我已编写此代码并将其放在OnClick上“复制到主表单”按钮的frmVendorPNLookUp事件中:Private Sub cmdAddTofrmPartSearch_Click()DoCmd.OpenForm ("frmPartSearch") Forms("frmPartSearch").CboClassificationSelection = Forms("frmVendorPNLookUp").lstVendorPNSearchResults.Column(3) Forms("frmPartSearch").cboFamilySelection = Forms("frmVendorPNLookUp").lstVendorPNSearchResults.Column(4) Forms("frmPartSearch").lstSearchResults.RequeryEnd Sub我已经确认我正在根据输入到lstVendorPNSearchResults控件中的值从frmPartSearch中提取正确的列。然而,Forms("frmPartSearch").lstSearchResults.Requery没有填充我的列表框。当我单独运行控制源时,会出现错误(“此表达式的输入错误,或者它太复杂而无法评估...”)如果我自己使用组合框,则可以重新查询列表框每个组合框。设置组合框值时是否需要声明ID字段?当我将值设置为匹配的控制源行时,它不应该与ID字段相关吗?我是基于驱动分类组合框的表的外键在列表框控件源中使用条件的问题吗?有没有更简单的方法使用AfterUpdate完成此操作?我不关心填写组合框,只要列表框仅显示基于它们输入的供应商PN的匹配零件即可。感谢您的任何帮助,您可以提供。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 (注意:直到现在我都错过了您的回复,请参见Replying in comments) 2列的绑定ID字段被隐藏,而文本字段可见。我正在VBA中设置文本的值有你的问题。您需要设置ID(绑定列),而不是文本。最简单的解决方案可能是将ID包含在lstVendorPNSearchResults行源中(宽度= 0),然后在frmPartSearch中设置组合框值而不是文本列时使用这些隐藏列的值。 (adsbygoogle = window.adsbygoogle || []).push({}); 08-05 00:28