![見出し画像](https://assets.st-note.com/production/uploads/images/153542274/rectangle_large_type_2_04338b2c6256140fa14a10a95724f505.png?width=1200)
UWSCでExcelのマクロを実行し終了を待って続行するUWSCの使い方【UWSC】
これも「日々の単純じゃない作業も自動化できるUWSCの使い方」の候補でしょうか。UWSC で Excel のマクロを実行すること自体は、Excel を起動させて実行したり、すでに開いている Excel の画面に対して処理を実行するという記事はよく見かけますね。Excel のマクロを掛けっぱなしにする。または待機時間を充分にとって処理を継続することは容易ですね。ただ、ちょっとしたアイデアを組み合わせることで Excel のマクロ終了を待って続行するUWSCマクロを作れると思います。
まず、Excel 側にステータスバーへ「マクロの終了」を表示させるマクロとステータスバーへの表示を中止するマクロを仕込んでおきます。
TEST は、処理の最後にステータスバーへ「マクロの終了」を表示させます。
Sub TEST()
Application.StatusBar = False
Application.Wait Now + TimeValue("00:00:02") '※ここに処理を入れてください
Application.StatusBar = True
Application.StatusBar = "マクロの終了"
End Sub
StatusBar_False は、UWSC 処理の最後に入れてステータスバーへの表示を中止させます。
Sub StatusBar_False()
Application.StatusBar = False
End Sub
次にUWSC側にステータスバーへ「TEST」を実行、「マクロの終了」の表示を確認するまで待機、「StatusBar_False」を実行するマクロを仕込んでおきます。
//----------------------------------------------------------------------
//ガード条件------------------------------------------------------------
//----------------------------------------------------------------------
NUM = GETALLWIN() //ウィンドウ数の取得NUM = GETALLWIN() //ウィンドウ数の取得
SONZAI=0
FOR i = 0 TO (LENGTH(ALL_WIN_ID) - 1)
//print (i+0)
if pos("Excel",STATUS(ALL_WIN_ID[i],ST_TITLE))>0 then
Excel=GETACTIVEOLEOBJ("Excel.Application")
SONZAI=1
STA_1=STATUS(ALL_WIN_ID[i],ST_TITLE)
endif
NEXT
if SONZAI=1 THEN //無ければエラー
//MSGBOX("存在") // 画面がある処理
//print "あり1"
else
MSGBOX("Excel が見つかりません") // 画面がない処理
//print "なし1"
exitexit
endif
//----------------------------------------------------------------------
//----------------------------------------------------------------------
Dim 開始秒 = GetTime() //エラー処理用ダミー 変数定義はここで
SLEEP(0.1)
//----------------------------------------------------------------------
id=getid(" Excel","XLMAIN",-1)
//************************************************************************
ActivateWindow(id)
//************************************************************************
Excel.Run ("Test")
//************************************************************************
WaitENDofVBA
//************************************************************************
excel.statusbar=""
Excel.Run ("Test")
//************************************************************************
WaitENDofVBA
//************************************************************************
excel.statusbar=""
Excel.Run ("StatusBar_False")
//----------------------------------------------------------------------
//----------------------------------------------------------------------
Dim 現在秒 = GetTime()
Fukidasi(現在秒-開始秒+"秒")
print 現在秒-開始秒 +"秒"
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//MSGBOX("中断!")
//exitexit
//----------------------------------------------------------------------
MSGBOX("完了しました!")
//------------------------------------------------------------------------
//共通関数モジュール
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//指定のウィンドウタイトルのウィンドウをトップレベルウィンドウにします
//------------------------------------------------------------------------
//************************************************************************
PROCEDURE ActivateWindow(id)
//************************************************************************
REPEAT
SLEEP(0.02)
CTRLWIN(id, ACTIVATE) // アクティブにする
UNTIL STATUS(id, ST_ACTIVE)
SLEEP(0.2)
//print "アクティブウィンドウ:"+STATUS(ID,ST_TITLE)
//************************************************************************
FEND
//************************************************************************
//************************************************************************
PROCEDURE WaitENDofVBA
//************************************************************************
Excel=GETACTIVEOLEOBJ("Excel.Application")
REPEAT
SLEEP(0.03)
print Excel.Application.StatusBar
UNTIL Excel.Application.StatusBar = "マクロの終了"
//************************************************************************
FEND
//************************************************************************
「Test」の Excel マクロでは、ただ2秒待機するだけの処理がダミーで入れてありますので、ここに処理を入れてください。
Application.Wait Now + TimeValue("00:00:02") '※ここに処理を入れてください
今回のサンプルでは、同じブックの同じ処理を2度処理する例にしてありますが、色々なブックの処理をする場合にも応用できると思います。
有料エリアには何も情報がありません
記事を評価してくれた方はサポートもお願いします
お試しあれ!
「誰もが無料でWindows自動化を始め、生産性を向上し続けられるようにする」
システム入力については、こちらをお試しあれ!
「システム画面へのデータ入力と検索、Excel へのデータ取得のサンプル」
セレクトボックスについては、こちらをお試しあれ!
入力モードの切り替えや特定キーの入力まで待機させたい方については、こちらをお試しあれ!
セレクトリストの設定値を取得、設定可能な候補を抽出、セレクトリストの設定がしたい方については、こちらをお試しあれ!
「UWSCとRPAの違いどんな人におすすめなのかをメリット・デメリットから解説」という記事を読みましたが、気になるのはココ!という話
「UWSCとは何か?RPA・VBAとの違い、使い方や危険性について詳しく解説」という記事を読みましたが、気になるのはココ!という話
「UWSCとは?自動化できる作業やメリット・デメリットを解説!」という記事を読みましたが、ちょっと極端ではないでしょうかという話
Excel で VBA マクロをプログラミングしている方は、UWSC のプログラミングもした方がイイ!という話。【UWSC】
有料エリアには何も情報がありません
記事を評価してくれた方はサポートもお願いします
ここから先は
¥ 100
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?