見出し画像

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 へのデータ取得のサンプル

セレクトボックスについては、こちらをお試しあれ!

セレクトボックス(チェックボックス)の設定サンプル

入力モードの切り替えや特定キーの入力まで待機させたい方については、こちらをお試しあれ!

GETKEYSTATEの設定サンプル

セレクトリストの設定値を取得、設定可能な候補を抽出、セレクトリストの設定がしたい方については、こちらをお試しあれ!

GETSLCTLSTの設定サンプル

有料エリアには何も情報がありません
記事を評価してくれた方はサポートもお願いします

ここから先は

15字

¥ 100

この記事が気に入ったらサポートをしてみませんか?