【发布时间】: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 的了解非常有限,我无法让调试器越过那条线。