【问题标题】:How to open macros from other databases - VBA, MS Access 2003如何从其他数据库打开宏 - VBA、MS Access 2003
【发布时间】:2013-11-11 12:08:06
【问题描述】:

我的任务是创建一个 Access 2003 应用程序,它将充当所有其他数据库(总共 6 个)的焦点。 这 6 个数据库都将包含一个宏,用于为名为 DispenseExport 的表构建数据绑定。

最初这些数据库中的每一个都有自己的该表版本,但现在我们必须让它们都写入一个应用程序 - 我亲切地将其命名为 Omega

Omega 将包含所有其他人将写入的DispenseExport 表。它也将是从其他数据库调用宏来写入它的数据库。

那么 - 完成此任务的最佳方法是什么?

我已经有一个示例子程序可以从另一个数据库调用宏(并且可以工作),但这里的问题是它像任何普通用户一样打开数据库 - Omega 将坐在服务器上并且需要绕过它 - 可能最好使用 SHIFT-KEY 访问方法?

如果这是最好的方法,我该如何在 VBA 中以编程方式执行此操作?

这是我目前所拥有的:

Option Compare Database
Option Explicit

'Sub to call a macro from another database
Public Sub CallMacro()

On Error GoTo ErrHandler:

Debug.Print "Opening Macro"
    '/x tells the database to run the macro as soon as it is opened
    Call Shell("msaccess.exe C:\path-to-database\database.mdb /x mcrTestCall", 0)
Debug.Print "Completed Macro"

ErrHandler:

 If Err.Number <> 0 Then
    'Create a message box with the error number and description
    MsgBox ("Sorry but error number " & Err.Number & " occurred; " & vbCrLf & Err.Description)
End If

End Sub

更新

仍然没有找到答案,但相信我已经接近了。我需要了解如何模拟 HOLDING DOWN SHIFT - 有什么想法吗?

谢谢

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    这将避免 shell 调用(Access 2007,还是 Access 2003?):

    '
    ' variables:
    '   strDbName: database filename
    '   strMacro: macro name
    '
    Sub CallMacro()
    '
      Dim strDbName, strMacro
      Dim objApp
    '
      strDbName = "C:\path-to-database\database.mdb"
      strMacro = "mcrTestCall"
    '
      Set objApp = CreateObject("Access.Application")
    '
      objApp.OpenCurrentDatabase strDbName
    '
    ' Run Macro:
    '
      objApp.DoCmd.RunMacro strMacro
    '
      objApp.Quit
      Set objApp = Nothing
    '
    End Sub
    

    要跳过启动表单或 AutoExec,没有简单的解决方案,但我们在 http://access.mvps.org/access/api/api0068.htm 中有一个解决方法,通过使用 API 模拟 Shift 键。

    【讨论】:

    • 这确实有效 - 它会打开数据库并运行宏,但问题仍然存在 - 当数据库打开时我仍然需要单击“打开” - 有没有办法绕过它?谢谢
    • 您是否单击标志(弹出)表单上的“打开”来打开数据库?
    • 没有简单的解决方案,请查看access.mvps.org/access/api/api0068.htm
    【解决方案2】:

    有一种更简洁的方法可以在不打开远程数据库的情况下执行此操作。在该数据库中构建一个执行您想要的查询,然后从另一个数据库调用它,而无需 ADO、DAO 或打开它。下面是一个链接,解释如何: Remote Queries 由于链接消失了,它的要点是: 1.构建您要调用的查询以在其他数据库中返回您需要的内容 2.在远程调用数据库中,不选择表打开查询(我使用查询设计) 3. 右键单击​​查询背景并选择“属性” 4.将(Current)的Database设置替换为查询数据库的完整路径 5.构建查询调用原始查询作为数据源 6.通过“SELECT INTO”或DoCmd.TransferSpreadsheet等输出数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2011-03-16
      相关资源
      最近更新 更多