我目前正在尝试开发VBA代码(案例陈述),该代码将基于用户从表单上的组合框中选择的查询名称来运行特定查询。当前,正在运行的查询与用户从组合框中选择的内容不匹配。
例如:
代码:VBA –使用的事件处理程序–更新后
Private Sub cboPlantQrys_AfterUpdate()
Select Case PlantQueries
Case Me.cboPlantQrys = "5"
DoCmd.Close
DoCmd.OpenQuery "qryPlantsLatin"
Case Me.cboPlantQrys = "3"
DoCmd.Close
DoCmd.OpenQuery "qryNewPlants2"
Case Me.cboPlantQrys = "4"
DoCmd.Close
DoCmd.OpenQuery "qryPlantInventoryTotal"
Case Else
MsgBox "Improper Selection"
End Select
End Sub
组合框– cboPlantQrys –行源SQL
SELECT tblQueries.QryID, tblQueries.QryData, tblQueries.QryName, tblQueries.QryGroup
FROM tblQueries
WHERE (((tblQueries.QryGroup)="Plants"));
不幸的是,我不确定如何解决此问题,因为行源SQL和更新后事件VBA在我看来是合乎逻辑的(但显然我缺少了一些东西)。
答案 0 :(得分:1)
实际上,由于要执行的查询的名称出现在ComboBox RowSource中,因此可以大大简化代码。
这是您的问题中所述的ComboBox RowSource:
SELECT tblQueries.QryID, tblQueries.QryData, tblQueries.QryName, tblQueries.QryGroup
FROM tblQueries
WHERE (((tblQueries.QryGroup)="Plants"));
这意味着ComboBox在运行时将有4列。在Access VBA代码中引用ComboBox或ListBox列时,列编号从0(零)开始。因此,QueryName
列将是第2列(因为它是RowSource中的第3列)。
现在,只需检查是否已做出有效选择(即ComboBox不为null或为空),然后执行查询,即可从ComboBox记录源中动态提取名称。
Private Sub cboPlantQrys_AfterUpdate()
'Easiest way to check for Null or Empty String is the following
'When you concatenate a possible Null with a zero length string
'the result is a string, therefore if the Length of this is greater
'then zero, we know the user chose an item in the ComboBox list.
If Len(Me.cboPlantQrys & "") > 0 Then
DoCmd.Close
Docmd.OpenQuery Me.cboPlantQrys.Column(2)
End If
End Sub
使用此代码,您不再需要在tblQueries
表中添加或删除查询(记录)时更新VBA代码。此代码将动态处理表中任意数量的行。
答案 1 :(得分:0)
尝试:
Private Sub cboPlantQrys_AfterUpdate()
Select Case Me.cboPlantQrys.Value
Case "5"
DoCmd.Close
DoCmd.OpenQuery "qryPlantsLatin"
Case "3"
DoCmd.Close
DoCmd.OpenQuery "qryNewPlants2"
Case "4"
DoCmd.Close
DoCmd.OpenQuery "qryPlantInventoryTotal"
Case Else
MsgBox "Improper Selection"
End Select
End Sub