vba - Access VBA调用函数在运行时什么都不做
问题描述
我有一个正在尝试在 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 行什么都不做。是什么阻止了这个函数做任何事情?
ETA:如果我添加我正在拼凑的其他两部分代码,也许会有所帮助。在上面的代码之前,我运行:
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 不太熟悉,所以其中大部分是我在其他地方找到的可以拼凑起来的代码。我知道我可以使用宏生成器来运行每个函数,但我真的不知道任何其他方式。如果有任何推荐的教程可以帮助我编写我想做的代码,我想阅读它们。
解决方案
您必须执行查询才能发生某些事情。
并跳过宏和函数。您只需拨打以下电话:
Sub UpdateSource(QueryName As String, CurrentSourceTable As String, NewSourceTable As String)
Dim strCsql As String
Dim defqry As DAO.QueryDef
Set defqry = CurrentDb.QueryDefs(QueryName)
strCsql = defqry.SQL
strNsql = Replace(strCsql, CurrentSourceTable, NewSourceTable)
defqry.SQL = strNsql
defqry.Execute
defqry.SQL = strCsql
defqry.Close
End Sub
推荐阅读
- python - 在 Python 中将错误处理与生成器关注点分开
- registry - 使用 Yarn 从 Github 包注册表安装私有包失败,未经授权
- typescript - 在 rxjs 效果中将数据从状态传递到新动作
- json - 设置 Blazor 服务器应用程序 JsonSerializerOptions
- django - Django Rest 'PageNumberPagination' 对象没有属性 'page' 错误
- git - 如何将提交分成多个壁球
- vba - 带有日期函数的 for/if 循环问题
- html - 从网页中的输入标签中提取元素信息
- r - 是否有用于反转数字向量内容符号的 R 函数?
- unit-testing - Microsoft.Extensions.Logging.Abstractions 更新后 Moq 和 Microsoft.Extensions.Logging.ILogger 单元测试失败