【Excel】VBAでMessageBoxを最前面表示し1秒後OKを押す

Excel
スポンサーリンク

Windows-API のMessageBoxを利用すると最前面表示できる

ExcelVBA でWindows-APIのMessageBoxを使うサンプル

'APIのMessageBox利用指定
Declare PtrSafe Function MessageBox Lib "user32.dll" Alias _
 "MessageBoxA" (ByVal hWnd As Long, ByVal msgC As String, ByVal msgT As String, ByVal uType As Long) _
 As Long
'OKボタンフラグ
Public Const MB_OK = &H0
'最前面フラグ
Public Const MB_TOPMOST = &H40000

Sub test_APImsgbox()
    Dim RET As Variant
    'API MSGBOX TEST
    RET = TopMostMsgBox("message", "title")
    'VBA MSGBOX TEST
    RET = MsgBox("vba-message", vbOKOnly, "vba-title")
End Sub

Function TopMostMsgBox(c, t)

    Dim msgT As String
    Dim msgC As String

    msgT = t
    msgC = c

    MessageBox 0, msgC, msgT, MB_OK Or MB_TOPMOST

End Function

test_APImsgbox を何か適当なWEB表示をして、実行してみると

TopMostMsgBox はメッセージボックスが最前面に表示されるが

MsgBox ではExcelを表示させないとメッセージが表示されないといった現象が起きる。

UWSCでコピペ作業をする場合にメッセージを表示させて、プログラム動作の通過ポイントを確認する場合には、 TopMostMsgBox を利用しWeb表示を確実にしてから次の操作に移るといった感じ、で

ExcelVBAとの連動を行うと、テストしながらプロトタイプ完成まで可視化できるので、私は良く使う手法だが、時間的には待ち時間が増えるというデメリットもあるので、短時間に処理を行う必要のあるシステム作成には不向きな組み方ではある。

下記に私が毎週使用している出馬表作成で TopMostMsgBox を使用して自動的に「OK」をEnterキー押下するVBAをサンプルとして記載する。

UWSC で TopMostMsgBox 表示した「OK」を自動で押す

TopMostMsgBox でMessageBoxを表示させて、UWSCの「記録」機能で保存した.uwsを編集すれば良いだけだが、汎用的に使いたいのでタイトルをUWSCで掴めるように変数にしている。

UWSC 「APIMSGENTER1.uws」を作成

PAR1="""" + PARAM_STR[0] + """"
ACW(GETID(PAR1,"#32770"),885,481,167,133,0)
SLEEP(1)
BTN(LEFT,CLICK,968,505)
KBD(VK_RETURN,CLICK,100)

PAR1にExcelVBAで設定するMessageBoxのタイトルを変数で渡すことで、1秒後にMessageBoxの「OK」をEnterキーで押すというプログラムが作成できる。

SLEEP(1)を(3)にすれば3秒後にEnterを押すという風に変更できるので、Web表示をするタイミングを考慮してこのプログラムを作成すれば良い。私は APIMSGENTER1.uws と APIMSGENTER8.uws をよく使っている。

SLEEP(n)として引数で渡せば、更に汎用性は増すが私の場合は1と8しかほぼ使わないので、待ち時間は固定にして.UWSを2つ作成している。

↓実際に「出馬表」のコピペExcelVBAの使用部分を抜粋しておくので、参考にしてほしい。

出馬表のヘッダーをコピペする箇所を抜粋

Sub SYUSOU_SELCPY()
'抜粋

''' UWSCの実行:クリップボードにヘッダーをコピぺ

    WSH.Run uwscPATH & "UWSC.exe" & " " & uwscfPATH & _
     "APIMSGENTER1.UWS" & " " & "SYUSOU2M.uws実行前", 8, False
    RET = TopMostMsgBox( _
     "出走データ作成!ブラウザが完全に表示されるまで待つこと!", _
     "SYUSOU2M.uws実行前")
    
    WSH.Run uwscPATH & "UWSC.exe" & " " & uwscfPATH & _
     "SYUSOU2M.uws" & " " & wk_nm2, 3, True

    If Not CB_CHK Then Exit Sub
'''
  • “SYUSOU2M.uws実行前”, 8, False

ここがポイントになる。先にEnterを押してからメッセージボックスを表示させるといったテクニックだが、なぜ?と疑わずこうやれば動くんだな!?的な感じで良い。

UWSCの各構文については、自分でググって下され。

編集後記

以前同じネタを無料ブログで掲載しているが、この時はJRAホームページを最前面 [TOPMOST] で表示せずに [Active] でいけるはずと思い込んでいたので、メッセージボックスだけ最前面にする方法を思いつき記事にしている。

ここから更に [Enter]キーを自動で押すことに挑戦し、Webを最前面にすれば全て上手くいくかな?というところまで辿り着くのに1年ほど経過した次第だ!

ExcelVBAとUWSCを使ってExcelシートにWeb内容をコピペする場合、手作業でやる順序そのままを書き写す感じで実行できるので、デバッグはやり易いが、裏で動かすといったことをやるなら他のRPAを考えた方が良い。

JRAホームページはデータベースを検索した結果を都度表示しているwebサイトなので、私の今の知識だと、UWSC+ExcelVBA が一番早く自作データベースが作成できるかな!?と思っている。

今後は、馬券の調子がもう少し上向きになったらJRA-VANデータラボを契約するかも知れない。という事とUbuntu+Googleコンテンツ+Pythonの自分のスキルアップでひょっとしたら全部無料でいけるかな~といった思いもあるので、カネが儲かるのが先か?知識が先か?といったところか?

まぁ後1年もすれば、馬券の今後も決まってくると思うので、その時はブログで記事化すると思うよw

それでは、またね~😎

タイトルとURLをコピーしました