VBAで 他のウィンドウをアクティブに

未分類

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併用アプリ起動とセットで制御可能
タイトルとURLをコピーしました