我刚刚开始深入研究 VBA,遇到了一些我不明白的事情。
我正在为我们的维修店建立一个零件数据库,作为知识库和采购工具。我有一个表格可以在数据库中搜索需要订购的零件(“frmPartSearch
”)。如果他们知道供应商部件号,我有一个弹出窗体(“frmVendorPNLookUp
”)来搜索用户批准的匹配项,然后我想在他们单击命令按钮时将该记录复制到主窗体中。
frmPartSearch
有两个组合框来选择零件的分类和系列,它们在列表框控件源的标准中用于仅显示具有该分类/系列名称的零件。列表框控件来源为:
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]));
我已经编写了这段代码并将其放在 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.Requery
End Sub
我已确认我正在根据输入到 lstVendorPNSearchResults
的控件中的值从 frmPartSearch
中提取正确的列。然而,
Forms("frmPartSearch").lstSearchResults.Requery
没有填充我的列表框。当我单独运行控件源时,我得到一个错误(“这个表达式输入不正确,或者它太复杂而无法计算......”)如果我自己使用组合框,它工作正常,重新查询列表框 AfterUpdate
每个组合框。
设置组合框值时需要声明ID字段吗?
当我将值设置为匹配的控件源行时,它不应该关联 ID 字段吗?
问题是我在基于驱动分类组合框的表的外键的列表框控件源中使用标准吗?
是否有更简单的方法使用 ListBox.Selected
来完成此操作?我不太关心是否填写组合框,只要列表框仅显示基于他们输入的供应商 PN 的匹配零件即可。
感谢您提供的任何帮助。
最佳答案
(注意:我到现在才看到你的回复,见Replying in comments)
2 Columns with the bound ID field being hidden and the text field visible. I am setting the value of the text in my VBA
这是你的问题。您需要设置 ID(绑定(bind)列),而不是文本。
最简单的解决方案可能是在 lstVendorPNSearchResults
行源(宽度 = 0)中也包含 ID,然后在 中设置组合框值时使用这些隐藏列的值frmPartSearch
而不是文本列。
关于vba - 当用 VBA 分配表达式中使用的控件时,列表框控件源错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35490984/