vba - 当用 VBA 分配表达式中使用的控件时,列表框控件源错误

标签 vba ms-access listbox

我刚刚开始深入研究 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/

相关文章:

excel - VBA舍入问题

sql - 该子查询最多可以返回一条记录。 (错误 3354)

c# - Scrollviewer 正在自行向下滚动

excel - 无法在 Excel 中更改 VBA 表单的 ListBox 属性

ms-access - 从 Access DB 发送包含动态名称附件的电子邮件

excel - VBA SPLIT 按不同的分隔符

sql - 使用 Microsoft Access SQL 将多个列中的数据合并到单个列中

c# - WPF:ListBox 项目从下到上显示

vba - 如何更新 PowerPoint 幻灯片 (VBA) 中的所有日期/时间值

mysql - 使用 SQL 聚合文本数据