2026年2月7日土曜日

Excelのvbaで他のアプリのウィンドウ内のテキストボックスにテキストを入力する

Excelのvbaで他のアプリのウィンドウ内のテキストボックスにテキストを入力し、ボタンを押します。 

Windows API (Win32 API)を使う。
DFindWindow系はクラス名かウィンドウハンドルのどちらかを指定する。指定しない方はvbNullString。

32bit環境でしか動作確認を行っておらず、DecleareにPtrSafeをつけてみたけどそれでOKかどうかよくわからない。LongPtrに変更が必要な個所があるかもしれない。


Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As String) As LongPtr

Sub test()
    Dim mainHwnd As Long, editHwnd As Long, btnHwnd As Long
    Const WM_SETTEXT As Long = &HC
    Const BM_CLICK As Long = &HF5
   
    mainHwnd = FindWindow(vbNullString, "Meiryo UIも大っきらい!!")
    editHwnd = FindWindowEx(mainHwnd, 0&, "Edit", vbNullString)
    btnHwnd = FindWindowEx(mainHwnd, 0&, vbNullString, "設定せず終了")
   
    Call SendMessage(editHwnd, WM_SETTEXT, 0, "メイリオ  11pt")
    Call SendMessage(btnHwnd, BM_CLICK, 0, 0)
End Sub


参考にしたサイト様
【VBA×WindowsAPI】Buttonコントロールを操作する LiCLOG様

VBAでWin32APIを使ってシートの文章を全てメモ帳に自動入力する方法 Excel作業をVBAで効率化 様

ウィンドウのハンドル・クラス名一覧を作成する Excel Tips for Learners様


0 件のコメント:

コメントを投稿