3

私は、他のすべてのデータベース (合計 6 つ) の中心として機能する Access 2003 アプリケーションを作成する任務を負っています。これらの 6 つのデータベースにはそれぞれ、 というテーブルにバインドされたデータを作成するために使用されるマクロが含まれますDispenseExport

当初、これらのデータベースはそれぞれ独自のバージョンのこのテーブルを持っていましたが、今ではそれらすべてを 1 つのアプリケーションに書き込む必要があります

Omega にはDispenseExport、他のすべてのユーザーが書き込むテーブルが含まれます。また、他のデータベースからマクロを呼び出して書き込むデータベースにもなります。

だから - これを達成するための最良の方法は何ですか?

私はすでに別のデータベースからマクロを呼び出すためのサンプルサブを持っています(そして動作します)が、ここでの問題は、通常のユーザーと同じようにデータベースを開くことです-オメガはサーバーに座っており、これをバイパスする必要があります-おそらく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

これにより、シェル呼び出しが回避されます (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. (Current) のデータベース設定を、クエリを含むデータベースへのフル パスに置き換えます元のクエリをデータソースとして 6. 「SELECT INTO」や DoCmd.TransferSpreadsheet などでデータを出力する

于 2015-05-14T16:26:33.580 に答える