【问题标题】:Can I programatically open a new query window?我可以以编程方式打开一个新的查询窗口吗?
【发布时间】:2015-12-21 19:37:33
【问题描述】:

我正在尝试弄清楚是否/如何通过宏或 VBA 代码在设计视图中生成新的查询窗口。

具体来说,我想在 SQL 视图中打开一个新的空白查询,以便快速测试 SQL 代码。这对我来说是一个常见的活动。

我通常通过功能区手动创建一个新查询:创建选项卡 > 查询设计按钮 > 关闭(显示表窗口)按钮 > SQL 视图按钮。 这会产生一个名为 Query1(或Query2 等)。

我想将所有这些多次单击浓缩为键盘快捷键或快速访问工具栏上的单个宏按钮。请注意,我使用的是 Access 2010。

可能吗?

【问题讨论】:

  • 顺便说一句,我看到我不应该使用常规的“宏”标签来解决与 Access 宏(又称 UI 宏)相关的问题。 是否有替代标签我应该使用吗?
  • 我编辑了我的问题以澄清我正在使用 Access 2010。

标签: ms-access vba


【解决方案1】:

将此添加到模块中:

Function NewQueryInSqlView()

    ' Send the ESC key, without waiting for processing,
    ' to cancel the select table dialog that occurs when designing new query
    SendKeys "{ESC}", False

    DoCmd.RunCommand acCmdNewObjectDesignQuery ' create new query
    DoCmd.RunCommand acCmdSQLView ' switch to SQL view

End Function

要通过键盘快捷键执行代码,请创建一个新宏,并确保“宏名称”列可见。 将以下行添加到宏中,在指定列中具有以下值:

Macro Name: +{F3}
    Action: RunCode
            with Function Name argument: NewQueryInSqlView()

将此宏保存为“AutoKeys”。该宏将 SHIFTF3 映射到 NewQueryInSqlView() 的执行。请注意,由于NewQueryInSqlView() 中的SendKeys 语句,选择以CTRL^ 字符)开头的键映射会出现问题。

【讨论】:

  • VBA 代码正是我想要的。太棒了。但是,我使用的是 Access 2010,所以我不能按照建议“确保'宏名称'列可见”。 (宏生成器“网格”在 2010 年被宏设计器取代。)另外,我能够创建一个带有名为 +{F3} 的子宏操作的 AutoKeys 宏。
  • @EJMak 你的suggested edit 可能足以成为它自己的答案。如果此答案帮助您到达that answer,您可以随时在答案中引用此内容。不幸的是,我不得不拒绝编辑,因为它与作者的意图大相径庭
  • 感谢您的反馈。编辑对我来说是新的,但我不确定我建议的编辑如何偏离作者的意图/目标,以及它是如何“实质性地”偏离的。是的,我扩展了所写的内容,但我专注于澄清。规则是否禁止/禁止更改样式(使用大纲格式)和/或添加细节(扩展以涵盖软件的当前版本)?我也不认为我可以在不抄袭的情况下将我的更改用作我“自己”的单独答案。 @AnAccess2007Guy 确实写了基本部分,而不是我。任何减少我的编辑的建议将不胜感激。
【解决方案2】:

编写一个函数并从宏中调用它:

Public Function foo()
    Dim qdf As QueryDef    
    Set qdf = CurrentDb.CreateQueryDef("qNew", "SELECT 'd' as foo")
    DoCmd.OpenQuery qdf.Name
End Function

这将创建查询并打开它

宏是运行上述函数的 RunCode 命令。

【讨论】:

  • 谢谢,但这并不能回答我的问题。我想替换我的问题中描述的点击。您的 VBA 会创建并保存一个新的查询对象——只有一列——然后在数据表视图中打开它。
  • 您可以将宏添加到您的功能区。你不能创建一个空查询并保存它,所以我不得不在 CreateQueryDef 中放一些 SQL。您还可以将查询打开的视图更改为设计视图:DoCmd.OpenQuery qdf.Name, acViewDesign
【解决方案3】:

试试这个代码:

Sub EmptyQuery()

  Dim Qname As String
  Qname = "mQname"

  On Error Resume Next
   CurrentDb.CreateQueryDef Qname
  On Error GoTo 0

  DoCmd.OpenQuery Qname, acViewDesign    

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多