通过 VBA 在 Access 2007 中运行以相同单词开头的多个查询
Posted
技术标签:
【中文标题】通过 VBA 在 Access 2007 中运行以相同单词开头的多个查询【英文标题】:Running multiple queries that begin by the same word in Access 2007 through VBA 【发布时间】:2014-10-13 20:32:00 【问题描述】:我或多或少是在 Access 中使用 VBA 的新手,希望我不是在问什么愚蠢的问题。是否可以通过 VBA 运行并保存多个以相同单词开头的查询?
我有一个包含多个表和查询的 Access 文件,这些表和查询由初始的 3 位代码标识,例如 100QueryName。我试图只运行以“901”开头的查询。
希望有人能帮帮我。
最好的问候
豪尔赫
【问题讨论】:
我假设查询要么更新/添加记录,要么将列表返回给用户?一次可以运行多少个? 【参考方案1】:下面的代码是一个开始(取决于什么类型的查询)...
创建一个模块并粘贴以下代码。然后执行子程序'Test_it'
Option Compare Database
Option Explicit
Sub Test_it()
Dim strPrefix As String
' Ask user for query prefix
strPrefix = InputBox("Please enter query prefix", "Qry Prefix")
MsgBox "Executed " & Run_Queries(strPrefix) & " queries.", vbOKOnly, "COunt of Queries"
End Sub
Function Run_Queries(strPrefix As String) As Integer
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim strQryName As String
Dim iQryCt As Integer
Dim iQryRan As Integer
Dim i As Integer
Set dbs = CurrentDb
iQryCt = dbs.QueryDefs.Count
i = Len(strPrefix)
iQryRan = 0
For Each qdf In dbs.QueryDefs
strQryName = qdf.Name
Debug.Print strQryName
If LCase(left(strQryName, i)) = LCase(strPrefix) Then
Debug.Print " ** Run: " & strQryName & vbTab & qdf.Type
If qdf.Type = 0 Then ' Select query
' Open this query to view results
DoCmd.OpenQuery strQryName
ElseIf qdf.Type = 48 Then ' Update query
dbs.Execute strQryName
End If
iQryRan = iQryRan + 1
Else
End If
Next qdf
Set qdf = Nothing
Set dbs = Nothing
Run_Queries = iQryRan
End Function
【讨论】:
你好韦恩。我已经尝试过这段代码,它似乎工作得很好。谢谢你。只有一个问题:当查询以这种方式运行时,它们是自动保存的,还是有特定的代码行来保存查询结果?此外,运行代码后,所有查询都会打开。是否可以添加一个命令来关闭它们? 您从未提及它们是操作查询(执行表更新、追加记录、制作表)还是返回记录列表。如果它们是操作查询,那么将没有打开列表,因此我假设您的问题是关于保存返回行的查询的结果?是的,您可以通过相同的代码(即 DoCmd.Close acQuery、strQryName)关闭查询。但是,您必须希望有人能够在关闭之前查看结果? 很抱歉没有回答我们正在讨论的查询类型。其中一半是选择查询,一半是附加查询。这有什么改变吗? 是的,可以与打开的查询交互,然后关闭它。自动关闭查询很简单(只需添加 'DoCmd.Close acQuery, strQryName')。但是,接口需要一个稍微复杂一点的过程。您不能简单地添加提示关闭 msgbox 的 VBA 代码,因为这会在 msgbox 打开时锁定进程。一种解决方案是创建一个带有文本框的表单来搜索前缀、“运行”和“关闭”的命令按钮。每次单击“运行”时,它都会处理下一个查询;每个“关闭”都会关闭最近打开的。其他用户可以关闭...以上是关于通过 VBA 在 Access 2007 中运行以相同单词开头的多个查询的主要内容,如果未能解决你的问题,请参考以下文章
Access 2007 可以在直接将数据上传到表后触发 VBA 代码吗?
通过 VBA 自动使用查询从 Ms Access 2007 生成报告
在Access 2007 VBA中,未保存的表单和报表是否可以键入为“AccessObject”..?