使用VBA

时间:2016-02-18 19:44:45

标签: 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

未填充我的列表框。当我单独运行控制源时,我得到一个错误(“这个表达式键入不正确,或者它太复杂而无法评估......”)如果我自己使用组合框,它会工作正常,这会重新查询列表框{ {1}}每个组合框。

设置组合框值时是否需要声明ID字段?

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

我在列表框控件源中使用条件的问题是基于驱动分类组合框的表的外键吗?

使用AfterUpdate是否有更简单的方法可以实现此目的?只要列表框只显示基于他们输入的供应商PN的匹配部件,我就不在乎填写组合框了。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

(注意:到目前为止,我错过了您的回复,请参阅Replying in comments

  

2个隐藏了绑定ID字段且文本字段可见的列。我在我的VBA中设置文本的值

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

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