UiPathで特定メッセージの時だけクリック

#はじめに
メッセージボックスに特定メッセージが表示された時だけクリックしたい時、
テキストを取得(Get Value）アクティビティとIf(条件分岐)アクティビティを使わず、UiExplorerにある［アンカーを選択］機能を使用することでクリック一発処理する方法のご紹介です。
目指せ、すっきりワークフロー★

##メッセージ内容でクリックするorしない
![selector_msgbox画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/7ff4715b-243f-01b1-dc51-456b3443081b.png)
メッセージボックスのボタンを指定時に取得したセレクター要素に、そのメッセージボックスのメッセージが入っていない…既存のVBAマクロをワークフローに組み込んでいる時とかのあるある現象ではないでしょうか。
上記画像の例なら、【チキン】が差し出された場合のみ[はい(Y)]をクリックしたいけど、取得セレクターの何処にもメッセージ文字列部分が無く、指定できません。

そんな時のフローの組み方、皆様どうされていますか？

結構多いパターンとして、メッセージボックスのテキストを取得し、そのテキストが指定のものなら条件分岐でクリック…でしょうか。
（※他にはアンカーベースActivityを使う方法や、クリックテキストActivityにクリック位置オフセット設定する方法とかありそうですが…割愛！）

ですが実はこれ、クリックActivityのセレクター設定のみで可能なのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/461479ef-9a18-d747-0070-114822052e69.png)

#設定方法
1.クリックActivityの要素指定で、メッセージボックスの[はい(Y)]を指定
まずは単純に、クリックしたい要素を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/8683b433-2e4d-bbf1-7ab9-3cb5b2c2b1e9.png)
この時点では当然、メッセージボックスのメッセージ内容に関係なくクリックします。
例の画像で言えば、【チキン】を出してきても【千キン】を出してきても、【ひとりぼっちのクリスマス】を出してきても、[はい(Y)]をクリックしてしまいます。

2.前項で作成したクリックActivityのセレクターを、UI Explorerで開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/96d121ec-68cf-7e99-e79f-f6f1d380823e.png)
(※ハンバーガーメニュー（≡）をクリックしてもUI Explorerが出てこないVerの場合は、［セレクターを編集］画面の左下にある［UI Explorerで開く］から開けます）
![UIExplorerで開く.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/4bf8d2c5-999e-dae9-327f-352d81b41677.png)


3.[アンカーを選択]をクリック
![アンカーを選択.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/4806e524-6802-293f-c30f-2c70b4cc38d6.png)

4.メッセージボックスのメッセージ要素を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/1698f24e-75ef-41ed-cd7a-db68313f0763.png)

5.完成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/301891/127a9164-04fd-6e97-941e-bb4ab2e61d50.png)
これで、メッセージボックスに特定メッセージが表示された時だけクリックするようになりました。
この例でいえば、チキンを差し出された時のみ[はい(Y)]をクリックしてくれます。

#まとめ
UiPathでアンカーと言うとアンカーベースActivityを使わなきゃいけない気がする（~~そして8割位の人が「何か面倒臭そう…」と使わない~~）のですが、アンカー機能単体でも使用可能、かつフローをすっきり出来る優秀機能です。
似たようなボタンをメッセージを元に区別しながら処理しなければならない時など、是非是非お試しください。


##サンプルVBA
[サンタさん]プロシージャを実行すると、ランダムでチキンとチキンらしきものをメッセージボックスに表示します（1秒間）
チキン表示時に[はい(Y)]をクリック、それ以外表示時に[はい(Y)]をクリック、で次に表示されるメッセージボックスが変わります。

参考サイト
乱数生成
https://vbabeginner.net/vba%E3%81%A7%E4%B9%B1%E6%95%B0%E3%82%92%E7%99%BA%E7%94%9F%E3%81%95%E3%81%9B%E3%82%8B%EF%BC%88rnd%E3%80%81randomize%EF%BC%89/

自動でCloseするメッセージボックス
http://officetanaka.net/excel/vba/tips/tips21.htm


<details><summary>サンプル使用したExcelVBAのコード</summary><div>

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