Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2019)
ExcelからAccessのフォームを開き最前面に表示する方法
投稿日時: 23/08/31 16:14:44
投稿者: Fukufuku23

ExcelとAccessの両方のファイルを開いている状態で、Excelファイル内のボタンクリックによりAccessの特定のフォームを開き、Accessのウインドウを前面に表示させたいと思っています。
@ExcelマクロでAccessのプロシージャーを呼び出し
AAccessのプロシージャーで
・特定のフォームを開く
・ウインドウを前面に表示
という流れで考えましたが、Aのウインドウを前面に表示するところがうまくいきません。ご教示いただけるとありがたいです。
ちなみにバージョンは2019の64ビットです。
 
<Excel側>
Sub アクセスに移動()
Dim objAcc As Object
Set objAcc = GetObject(,"Access.Application")
 
If Not objAcc Is Nothing Then
objAcc.Run "Testプロシージャー"
End If
Set objAcc = Nothing
End Sub
 
<Access側>
Sub Testプロシージャー()
 
'F_testフォームを開く
DoCmd.OpenForm "F_test"
 
'F_testフォームを前面表示する
・・・・?
 
End Sub

回答
投稿日時: 23/08/31 17:37:47
投稿者: sk

引用:
ExcelとAccessの両方のファイルを開いている状態で、
Excelファイル内のボタンクリックによりAccessの特定のフォームを開き、
Accessのウインドウを前面に表示させたいと思っています。

引用:
<Excel側>
Sub アクセスに移動()
Dim objAcc As Object
Set objAcc = GetObject(,"Access.Application")
  
If Not objAcc Is Nothing Then
objAcc.Run "Testプロシージャー"
End If
Set objAcc = Nothing
End Sub

( Excel ブック側の標準モジュール)
-------------------------------------------------------------------
Option Explicit
 
'モジュールレベルで API 関数の宣言を行なう
Private Declare PtrSafe Sub SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr)
 
Sub アクセスに移動()
     
    Dim objAcc As Object
     
    On Error Resume Next
    Set objAcc = GetObject(, "Access.Application")
    If Err.Number <> 0 Then
        MsgBox Err.Number & ": " & Err.Description, _
               vbCritical, _
               "実行時エラー"
        Exit Sub
    End If
    On Error GoTo 0
         
    'Accessのアプリケーションウィンドウを最前面に
    SetForegroundWindow objAcc.hWndAccessApp
     
    objAcc.Run "Testプロシージャー"
     
    Set objAcc = Nothing
 
End Sub
-------------------------------------------------------------------
 
以上のようになさればよろしいでしょう。

投稿日時: 23/09/01 10:25:46
投稿者: Fukufuku23

sk様
 
早々にご回答いただきまして誠にありがとうございます。
 
おかげさまで希望通りの動きになりました。
大変勉強になりました。ありがとうございました。