在查看以下两篇帖子后,我遇到了这个问题:
Displaying a Crosstab Query with a Parameter as Subform Source Object
how can i populate textbox through VBA in MS Access
TableA(交叉表转换前的销售数据):
Row_ID | Year | CustomerID | Product | Location
001 2011 A00001 Muffin GroceryStore
002 2011 A00002 Muffin Supermarket
003 2012 A00001 Muffin GasStation
004 2012 A00002 CandyBar GroceryStore
005 2012 A00002 Muffin GasStation
目前,我有一个访问表单,如下所示:
在我的表单中,我希望用户能够选择“年份”和“位置”值。一旦他们这样做,我希望他们看到在“位置”组合框下面的控件中特定位置出售的松饼数量,即“松饼计数”控件。
我已经为'Location'控件的OnClick事件编写了VBA(见下文)。它不仅生成转换原始表('TableA')的交叉表查询,而且还从新交叉表表中的'Muffins'列中获取值,并将其置于'Muffin Count'控件中:
到目前为止VBA:
Private Sub cboChoice_1_Click()
Dim SQL As String
Dim db As Database
Dim rs As DAO.Recordset
SQL = "TRANSFORM Count(TableA.CustomerID) AS CountOfCustomers " _
& "SELECT TableA.Year, TableA.Location FROM TableA " _
& "WHERE TableA.Product='Muffin' " _
& "AND TableA.Year='" & Me.cboChoice_1.Value & "' " _
& "AND TableA.Location='" & Me.cboChoice_2.Value & "' " _
& "GROUP BY TableA.Year, TableA.Location PIVOT TablaA.Product;"
Set db = CurrentDb
Set rs = db.OpenRecordset(SQL)
Me.txt_Muffin_Count.Value = rs!Muffins
End Sub
挑战:
此架构有效,除非我选择年份 - 位置组合,其中值预期为空(意味着该特定年份的特定位置没有销售松饼)。
这些事件(其中Muffin Count预计为Null)也会生成“运行时错误'3265'错误项目在此集合中找不到”。
我想找到一种方法(如果可能的话)让我的VBA处理这些空实例。我的最终目标是在生成生成Null值的Year-Location选项时消除“运行时错误'3265'...”消息。
理想情况下,我还希望我的VBA只在“Muffin Count”文本框控件中插入“无记录”文本。
答案 0 :(得分:2)
在此示例中,我检查了查询是否有任何结果。如果有结果,松饼的数量就像你以前一样设定。如果查询没有结果,则将松饼数设置为0.这样可以避免在没有结果的情况下出现错误。
if not rs.EOF
Me.txt_Muffin_Count.Value = rs!Muffins
else
Me.txt_Muffin_Count.Value = 0
end if
答案 1 :(得分:2)
您无需为此创建TRANSFORM或创建查询。只需在组合框的OnChange事件中添加一些代码,检查两个组合框是否都有一个有效值。如果是这样,请填写txt_Muffin_Count,如下所示:
Me.txt_Muffin_Count = _
DCount("RowID","TableA","Product = 'Muffin' " & _
"AND Year='" & Me.cboChoice_1.Value & "' " & _
"AND Location = '" & Me.cboChoice_1.Value & "'")
对于" No Sales"
,这将返回0而不是NULL