如何解决运行时错误' 3265'在我的Access窗体中使用VBA?

时间:2014-06-06 19:08:58

标签: sql vba ms-access access-vba crosstab

在查看以下两篇帖子后,我遇到了这个问题:

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

目前,我有一个访问表单,如下所示:

Access form

在我的表单中,我希望用户能够选择“年份”和“位置”值。一旦他们这样做,我希望他们看到在“位置”组合框下面的控件中特定位置出售的松饼数量,即“松饼计数”控件。

我已经为'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”文本框控件中插入“无记录”文本。

2 个答案:

答案 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