3

我的任务是创建一个 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 - 有什么想法吗?

谢谢

4

2 回答 2

3

这将避免 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 键。

于 2013-11-11T13:00:53.100 回答
0

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

于 2015-05-14T16:26:33.580 回答