2016-06-15 3 views
1

私は、以下の2行に基づいてフォアグラウンドにアクセスするためのアクセスデータベースを取得しようとしています。私はなぜそれが動作していないか、またはこれを行うためのより良い方法があるかどうかはわかりません。現在のAccess DBをVBA経由でフォアグラウンドに移行するにはどうすればよいですか?

私が読んだから、これは動作するはずです:

Access.Visible = False 
Access.Visible = True 

しかし、実際には前にデータベースをもたらすことはありません。詳細は

編集:

Private Sub Form_Open(Cancel As Integer) 
    getStrUserName = Environ("username") 

    dbName = "myDB.accdb" ' database name 
    versionChckDB = "versionCheckDB.accdb" ' version check db name 
    strServer = "C:\My\Path\to\Server" ' server location string 
    strDesktop = "C:\My\Path\to\Local" ' desktop location string 
    strVersionCheck = "C:\My\Path\to\Version" ' version check location 

    Static acc As Access.Application 
    Dim db As DAO.Database 
    Dim strDbName As String 

    If FileLocked(strDesktop & "\" & versionChckDB) Then 
     Dim objAccess As Access.Application 
     Set objAccess = GetObject(strDesktop & "\" & versionChckDB) 
     objAccess.Application.Quit acQuitSaveAll 
     Set objAccess = Nothing 
     DoCmd.OpenForm "frmMainMenu" 
     DoCmd.RunCommand acCmdAppMaximize 
     Access.Visible = False 
     Access.Visible = True 
     GoTo exitSub 
    Else 
     strDbName = strDesktop & "\" & versionChckDB 
     Set acc = New Access.Application 
     acc.Visible = True 
     Set db = acc.DBEngine.OpenDatabase(strDbName, False, False) 
     acc.OpenCurrentDatabase strDbName 
    End If 
    'db.Close 
    exitSub: 
     Call SetForegroundWindow(Application.hWndAccessApp) ' bringing access DB to foreground 

    End Sub 
+0

? 'SetForegroundWindow(Application.hWndAccessApp)'は、 'Form_Open'コードを含むものをフォアグラウンドウィンドウにする必要があります。それはあなたが欲しいものですか? – HansUp

+0

@ HansUp私は現在のデータベース(コードの観点から)がフォアグラウンドに来るようにしたい。 –

+1

(Set acc = New Access.Application'を使用する代わりに)このように他のデータベースを開くとどうなりますか? (MSACCESS.EXE "&" "" "" "&strDbName&" "" "' – HansUp

答えて

4

通常1は、そのためのAPI関数を使用しています。

http://www.access-programmers.co.uk/forums/showthread.php?t=132129から:

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long 

、その後

Call SetForegroundWindow(Application.hWndAccessApp) 

編集
あなたが前に新しくオープンしたAccessアプリケーションウィンドウを取得したい場合、あなたはそのhWndが必要になります。

Call SetForegroundWindow(acc.hWndAccessApp) 

編集2
これは私のために働く。メモ帳は、フォアグラウンド、次にアクセスウィンドウに短時間表示されます。

モジュール:

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long 
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Public Sub TestAccessToForeground() 

    Sleep 300 
    Shell "notepad.exe", vbNormalFocus 
    Sleep 300 
    Call SetForegroundWindow(Application.hWndAccessApp) 

End Sub 

フォーム:あなたはフォアグラウンドウィンドウとしてたくない何Accessアプリケーションインスタンス

Private Sub Form_Open(Cancel As Integer) 

    Call TestAccessToForeground 

End Sub 
+0

は、私はこれを試してみたが、私は宣言を追加した後、次のエラーを取得:変更宣言: は 'あなたが入力したオープンで式が.....ステートメントを宣言したオブジェクトmodules' 編集のパブリックメンバーとして許可されていませんプライベートに、働き始めた。しかし、それでも前景にそれを持って来ない。 –

+0

その宣言を標準モジュールに入れます。その後、アプリケーション内の他のコードから呼び出すことができます。 – HansUp

+0

@ HansUpそれは理にかなっていますが、アプリケーションをフォアグラウンドに持ち込んだわけではありません。 –

関連する問題