#はじめに
メッセージボックスに特定メッセージが表示された時だけクリックしたい時、
テキストを取得(Get Value)アクティビティとIf(条件分岐)アクティビティを使わず、UiExplorerにある[アンカーを選択]機能を使用することでクリック一発処理する方法のご紹介です。
目指せ、すっきりワークフロー★
##メッセージ内容でクリックするorしない
メッセージボックスのボタンを指定時に取得したセレクター要素に、そのメッセージボックスのメッセージが入っていない…既存のVBAマクロをワークフローに組み込んでいる時とかのあるある現象ではないでしょうか。
上記画像の例なら、【チキン】が差し出された場合のみ[はい(Y)]をクリックしたいけど、取得セレクターの何処にもメッセージ文字列部分が無く、指定できません。
そんな時のフローの組み方、皆様どうされていますか?
結構多いパターンとして、メッセージボックスのテキストを取得し、そのテキストが指定のものなら条件分岐でクリック…でしょうか。
(※他にはアンカーベースActivityを使う方法や、クリックテキストActivityにクリック位置オフセット設定する方法とかありそうですが…割愛!)
ですが実はこれ、クリックActivityのセレクター設定のみで可能なのです。
#設定方法
1.クリックActivityの要素指定で、メッセージボックスの[はい(Y)]を指定
まずは単純に、クリックしたい要素を指定します。
この時点では当然、メッセージボックスのメッセージ内容に関係なくクリックします。
例の画像で言えば、【チキン】を出してきても【千キン】を出してきても、【ひとりぼっちのクリスマス】を出してきても、[はい(Y)]をクリックしてしまいます。
2.前項で作成したクリックActivityのセレクターを、UI Explorerで開く
(※ハンバーガーメニュー(≡)をクリックしてもUI Explorerが出てこないVerの場合は、[セレクターを編集]画面の左下にある[UI Explorerで開く]から開けます)
5.完成
これで、メッセージボックスに特定メッセージが表示された時だけクリックするようになりました。
この例でいえば、チキンを差し出された時のみ[はい(Y)]をクリックしてくれます。
#まとめ
UiPathでアンカーと言うとアンカーベースActivityを使わなきゃいけない気がする(そして8割位の人が「何か面倒臭そう…」と使わない)のですが、アンカー機能単体でも使用可能、かつフローをすっきり出来る優秀機能です。
似たようなボタンをメッセージを元に区別しながら処理しなければならない時など、是非是非お試しください。
##サンプルVBA
[サンタさん]プロシージャを実行すると、ランダムでチキンとチキンらしきものをメッセージボックスに表示します(1秒間)
チキン表示時に[はい(Y)]をクリック、それ以外表示時に[はい(Y)]をクリック、で次に表示されるメッセージボックスが変わります。
自動でCloseするメッセージボックス
http://officetanaka.net/excel/vba/tips/tips21.htm
サンプル使用したExcelVBAのコード
Option Explicit
Function PresentForYou() As String
Dim iMin '// 最小値
Dim iMax '// 最大値
Dim ret '// 乱数
Dim presents() As Variant '// 配列
iMin = 0
iMax = 4
presents = Array("チキン", "チキソ", "チ‡ン", "千キン", "チキ冫")
'// 疑似乱数列を初期化
Call Randomize
'// 最小値から最大値の範囲の乱数を取得
ret = Int((iMax - iMin + 1) * Rnd + iMin)
PresentForYou = presents(ret)
End Function
Sub サンタさん()
Dim WSH As Object
Set WSH = CreateObject("WScript.Shell")
Dim Partybarrel As String '// 乱数取得した値
Dim Myvar '// メッセージボックスでクリックされた値(6=[はい])
Partybarrel = PresentForYou() '//PresentForYouから引き渡される値
Myvar = WSH.Popup("「 ̄ヽ、" + vbNewLine + _
"|二二)O" + vbNewLine + _
"|・ω・`)つ " + Partybarrel, 1, "プレゼントだよ!", vbYesNo)
Set WSH = Nothing
If Myvar = 6 Then
If Partybarrel = "チキン" Then
MsgBox "Merry Christmas" + vbNewLine + _
" ∧∧" + vbNewLine + _
" (*゚ー゚)" + vbNewLine + _
"☆☆""∪∪""ミ☆☆" + vbNewLine + _
"‥‥‥▲‥*‥‥" + vbNewLine + _
"‥*‥▲▲‥‥‥" + vbNewLine + _
"‥‥▲▲▲‥‥*" + vbNewLine + _
"*‥▲▲▲▲‥‥" + vbNewLine + _
"‥‥‥■‥‥*‥"
Else
MsgBox "残念だったな…"
End If
End If
Set WSH = Nothing
End Sub