使用VBA指定表达式中使用的控件时,Listbox控件源错误

使用VBA指定表达式中使用的控件时,Listbox控件源错误,vba,ms-access,listbox,Vba,Ms Access,Listbox,我刚刚开始深入研究VBA,遇到了一些我不明白的事情 我正在为我们的维修车间建立一个零件数据库,作为知识库和购买工具。我有一个表格可以在数据库中搜索需要订购的零件(“frmPartSearch”)。如果他们知道供应商零件号,我有一个弹出表单(frmvendopnlookup)来搜索匹配项供用户批准,然后我想在他们单击命令按钮时将该记录复制到主表单中 frmPartSearch有两个组合框,用于选择零件的分类和族,在列表框控制源的条件中使用,以仅显示具有该分类/族名称的零件。listbox控件源是:

我刚刚开始深入研究VBA,遇到了一些我不明白的事情

我正在为我们的维修车间建立一个零件数据库,作为知识库和购买工具。我有一个表格可以在数据库中搜索需要订购的零件(“
frmPartSearch
”)。如果他们知道供应商零件号,我有一个弹出表单(
frmvendopnlookup
)来搜索匹配项供用户批准,然后我想在他们单击命令按钮时将该记录复制到主表单中

frmPartSearch
有两个组合框,用于选择零件的分类和族,在列表框控制源的条件中使用,以仅显示具有该分类/族名称的零件。listbox控件源是:

SELECT tblPart.chrPartNumber
  , tblPart.chrDescription
  , tblKnowledgeBase.idsKB
FROM (tblFamily 
RIGHT JOIN tblPart 
  ON tblFamily.idsFamily = tblPart.lngFamilyId) 
LEFT JOIN tblKnowledgeBase 
  ON tblPart.idsPart = tblKnowledgeBase.lngPartId
WHERE (((tblPart.chrDescription) 
  Like "*" & [Forms]![frmPartSearch]![txtKeywordSearchCriteria] & "*") 
AND ((tblFamily.lngClassificationId)
  =[Forms]![frmPartSearch]![cboClassificationSelection]) 
AND ((tblFamily.chrFamilyTitle)
  =[Forms]![frmPartSearch]![cboFamilySelection]));
我已经编写了此代码,并将其放置在
frmvendopnlookup
上我的“复制到主窗体”按钮的
OnClick
事件中:

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.Requery
End Sub
我已确认,我正在根据输入到
frmPartSearch
控件中的值,从
lstVendorpSearchResults
中提取正确的列。但是,

Forms(“frmPartSearch”).lstSearchResults.Requery

未填充我的列表框。当我单独运行控制源代码时,会出现一个错误(“此表达式键入错误,或者太复杂,无法计算…”)。如果我单独使用组合框,它会重新查询每个组合框的列表框
AfterUpdate

设置combobox值时是否需要声明ID字段

当我将值设置为匹配的控制源行时,它不应该与ID字段相关吗

我在listbox控件源代码中使用的条件是否基于驱动分类组合框的表的外键

是否有更简单的方法使用
ListBox.Selected
?我不太关心如何填写组合框,只要列表框仅显示基于输入的供应商PN的匹配零件

感谢您提供的任何帮助。

(注意:我一直没有收到您的回复,请参阅)


2列,其中绑定ID字段隐藏,文本字段可见。我正在设置VBA中文本的值

这是你的问题。您需要设置ID(绑定列),而不是文本


最简单的解决方案可能是在
lstVendorpSearchResults
行源中包含ID(宽度为0),然后在
frmPartSearch
中设置组合框值时使用这些隐藏列的值,而不是文本列。

您使用的图像太多了。它们不是必需的(包含的绝大多数信息都可以在文本中描述)。图像很难读取,无法从中复制/粘贴信息,并且经常被公司代理阻止,这意味着这些读者无法获取内容。此外,对于那些使用移动设备的读者来说,这是非常困难的。您是否可以删除尽可能多的内容并改用文本?(当你在做这件事的时候,修复你发布的SQL混乱的格式,使其可读并且不会水平滚动?)谢谢。我感谢你的指导。谢谢。frmPartSearch上的组合框是单列,还是有两列,绑定列=ID(宽度0),文本为可见列?两列,绑定ID字段隐藏,文本字段可见。我正在VBA中设置文本的值。什么是
“frmPastSearch”
?。它出现在
表单(“frmPastSearch”).lstSearchResults.Requery
中。