通过 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”..?

Access 2007 运行时错误

Access 2007 使用 VBA/SQL 语句中列表框中的 ID 值

Access 2007:意外错误 (40230)