【问题标题】:Run-time error '3265': Item not found in this collection. VBA module in Access运行时错误“3265”:在此集合中找不到项目。 Access 中的 VBA 模块
【发布时间】:2021-07-14 18:46:53
【问题描述】:

我正在尝试创建一个宏,该宏将为每年的设备审计复制一个表及其相关查询。我复制了在另一个论坛上找到的一些代码,但我在一行的标题中收到错误。我对 VBA 不够熟悉,无法理解问题所在,所以我希望能得到一些帮助。

此代码应该替换复制查询中的源表,这样就不必每年都重新进行查询。代码如下:

Sub UpdateQuery(QueryName, CurrentSourceTable, NewSourceTable)

Dim strQryName, strCTbl, strNTbl, strCsql, strNsql As String
Dim defqry As DAO.QueryDef

strQryName = QueryName
strCTbl = CurrentSourceTable
strNTbl = NewSourceTable

Set defqry = CurrentDb.QueryDefs(strQryName)

strCsql = defqry.SQL
strNsql = Replace(strCsql, strCTbl, strNTbl)
defqry.SQL = strNsql
defqry.Close

End Sub

错误发生在“Set defqry”行。谁能告诉我是什么导致了错误?

预计到达时间:

当我尝试运行上面的代码时,我也在使用下面的代码来填写QueryName/CurrentSourceTable/NewSourceTable:

Sub Proc1()

Call UpdateQuery(YYYY_Count_of_items_by_floor, Building_Audit_2021, Building_Audit_YYYY)

End Sub

同样,我没有编写此代码,我复制了其他人编写的代码,并试图将其用于我需要的内容。

【问题讨论】:

  • 显然CurrentDb.QueryDefs 不包含以strQryName 命名的查询。
  • 为什么还要麻烦二级变量? CurrentDb.QueryDefs(QueryName)。现在逐步调试 - 是否通过 QueryName 传递了有效数据?
  • 为什么仅仅因为年份变化就需要复制表和查询?数据库结构出现严重问题。
  • 每年都有一次单独的设备审核,有近 20k 项要审核。它的运行速度已经足够慢,仅一年就可以对列进行排序,而且我正在尝试创建一个结构,该结构对于不熟悉 Access 的任何人来说都是虚拟证明。我需要将每年发现的设备保存在单独的表中,因此需要复制表结构和所有相关查询。
  • 有调试的,请记住我只熟悉Access的前端。我对 VBA 的了解非常有限,我无法让调试器越过那条线。

标签: vba ms-access


【解决方案1】:

谢谢,HansUp! YYYY_Count_of_items_by_floor 确实是查询的名称,所以我只需要用引号将它括起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多