【发布时间】:2021-07-15 19:26:36
【问题描述】:
我有一个正在尝试在 Access 中构建的宏,它将更改一组查询的源表。这是我构建的(基于我在论坛上找到的已经编写的代码):
Function ReplaceSources()
Call SourceQueries
End Function
Sub SourceQueries()
Call UpdateSource("YYYY_Count_of_items_by_floor", Building_Audit_2021, Building_Audit_YYYY)
End Sub
Sub UpdateSource(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
当我在宏生成器中使用函数名 ReplaceSources() 使用 RunCode 选项时,没有任何反应。我没有收到任何错误,我可以毫无问题地单步执行代码,并且在整个函数和 subs 中添加 Debug.Print 行什么都不做。是什么阻止了这个函数做任何事情?
预计到达时间: 如果我添加与此部分拼凑的其他两部分代码,也许会有所帮助。在上面的代码之前,我运行:
Function Copy_audit_table()
On Error GoTo Copy_audit_table_Err
Dim strPath As String
strPath = CurrentProject.FullName
DoCmd.TransferDatabase acImport, "Microsoft Access", strPath, acTable, "Building_Audit_2021", "Building_Audit_YYYY", True
DoCmd.CopyObject "", "YYYY_Count_of_items_by_floor", acQuery, "2021_Count_of_items_by_floor"
Copy_audit_table_Exit:
Exit Function
Copy_audit_table_Err:
MsgBox Error$
Resume Copy_audit_table_Exit
End Function
然后在有问题的代码之后,我运行:
Function Copy_audit_table_rename()
On Error GoTo Copy_audit_table_rename_Err
Dim AuditYear As Variant
AuditYear = InputBox("Enter audit year (YYYY)")
Dim strPath As String
strPath = CurrentProject.FullName
DoCmd.Rename "Building_Audit_" & AuditYear, acTable, "Building_Audit_YYYY"
DoCmd.Rename AuditYear & "_Count_of_items_by_floor", acQuery, "YYYY_Count_of_items_by_floor"
Copy_audit_table_rename_Exit:
Exit Function
Copy_audit_table_rename_Err:
MsgBox Error$
Resume Copy_audit_table_rename_Exit
End Function
我对 VBA 不太熟悉,所以其中大部分是我在其他地方找到的可以拼凑起来的代码。我知道我可以使用宏生成器来运行每个函数,但我真的不知道任何其他方式。如果有任何推荐的教程可以帮助我编写我想做的代码,我想阅读它们。
【问题讨论】:
-
请在您执行任何其他操作之前,将
Option Explicit放在每个模块的顶部。它强制执行变量声明并在编译时报告未声明或拼写错误的变量/常量。要在新模块中自动启用此功能,请在 VBA 编辑器中设置 Require Variable Declaration 选项。这确实是 VBA 开发的必备。 -
为什么要使用宏?无法复制问题。
-
添加选项显式后,我在两个表名上收到“变量未定义”的消息。我将这些用引号括起来,以防止错误再次弹出,但运行时它仍然没有任何作用。