VBAで他のウィンドウをアクティブにする方法としては、以下のいずれかを使用するのが一般的です:

✅ AppActivate を使う(手軽)
Sub ウィンドウをアクティブにする_AppActivate()
' ウィンドウタイトルを指定してアクティブ化
AppActivate "メモ帳"
' アクティブ化後にキーを送信
SendKeys "{F5}"
End Sub
"メモ帳"
はウィンドウタイトルの一部でOK。- 日本語アプリ名の場合、正確に一致させる必要があります。
- ウィンドウが存在しないとエラーになる可能性があります。
✅ Windows API を使ってウィンドウをアクティブにする(より確実)
こちらは安定性・柔軟性重視の場合の方法です。
#If VBA7 Then
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" ( _
ByVal hwnd As LongPtr) As Long
#Else
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" ( _
ByVal hwnd As Long) As Long
#End If
Sub ウィンドウをアクティブにする_API()
Dim hwnd As LongPtr
hwnd = FindWindow(vbNullString, "無題 - メモ帳") ' フルウィンドウタイトル
If hwnd <> 0 Then
SetForegroundWindow hwnd
SendKeys "{F5}"
Else
MsgBox "ウィンドウが見つかりませんでした。"
End If
End Sub
✅ Shell + AppActivate の組み合わせ(プロセスから起動)
既に解説に含まれている方法と合わせて使うとベターです:
Sub メモ帳を起動してアクティブにする()
Dim pid As Double
pid = Shell("notepad.exe", vbNormalFocus)
Application.Wait Now + TimeValue("00:00:01")
AppActivate pid
SendKeys "{F5}"
End Sub
📌 まとめ
方法 | 特徴 |
---|---|
AppActivate | 簡単・素早い |
API | 安定・細かい制御が可能 |
Shell 併用 | アプリ起動とセットで制御可能 |