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

目次

Windows-API のMessageBoxを利用し最前面表示する

  1. MessageBoxを最前面表示させる
  2. Enterキーを押すUWSCプログラムを作成する
  3. 動作テスト
Windowsマクロテクニック: 超速!!(UWSCの使い方)

Windowsマクロテクニック: 超速!!

  1. マクロの基礎知識
  2. 実践!サンプルマクロ集
  3. UWSCで使える関数や制御文
  4. 他のアプリケーションの高度な制御方法
  5. マクロをもっと使いこなそう
  • あとがき
  • 付録
  • 索引

※UWSCの書籍として今も購入可能なモノは2種のみなので、その点を考慮すると★5になるが運よく中古があれば500円以下で購入可能!
Amazonレビューは★3.9

私のKindle-Unlimited評価は★3

Windowsを自動化!UWSC逆引き本 Kindle版

Windowsを自動化!UWSC逆引き本 Kindle版

  1. はじめに
  2. UWSCについて
  3. UWSCスクリプトをつくる
  4. 文字を操作する
  5. 配列を操作する
  6. ファイルを操作する
  7. ウィンドウを操作する
  8. システムを制御する
  9. ブラウザを操作する
  10. Officeスイートを操作する
  11. 高度な操作

Kindle販売なので在庫がなくなることはない?
UWSCの読み物として暇なときに見るようにしている
Amazonレビューは★3.9

私のKindle-Unlimited評価は★3

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表示を確実にしてから次の操作に移るといった感じ、で

UWSCでExcelVBAとの連動を行うWEBスクレイピングでは、テストしながらプロトタイプ完成まで可視化できるので、私は良く使う手法だが

  • 待ち時間が増える
  • モニターを占有する
  • 各ツール間の繋ぎのタイムラグを許容したモジュール作成が必要となる

というデメリットもあるので、短時間に処理を行う必要のあるシステム作成には不向きな組み方ではある。

下記に私が毎週使用している出馬表作成で 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の各構文については、[UWSC HELP] で確認を!

編集後記

2024.1.24時点でもWin11上でUWSCは使えているが、今後AIの進化!さしずめ ChatGPT , Microsoft365 Copilot , Power Automate が、2024年は更に加速度的に相乗効果でMicrosoft一強へ動き出すかもしれない🦆

それでは、またね~😎

目次