LoginSignup
11
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-12-06

はじめに

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

メッセージ内容でクリックするorしない

selector_msgbox画面.PNG
メッセージボックスのボタンを指定時に取得したセレクター要素に、そのメッセージボックスのメッセージが入っていない…既存のVBAマクロをワークフローに組み込んでいる時とかのあるある現象ではないでしょうか。
上記画像の例なら、【チキン】が差し出された場合のみ[はい(Y)]をクリックしたいけど、取得セレクターの何処にもメッセージ文字列部分が無く、指定できません。

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

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

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

image.png

設定方法

1.クリックActivityの要素指定で、メッセージボックスの[はい(Y)]を指定
まずは単純に、クリックしたい要素を指定します。
image.png
この時点では当然、メッセージボックスのメッセージ内容に関係なくクリックします。
例の画像で言えば、【チキン】を出してきても【千キン】を出してきても、【ひとりぼっちのクリスマス】を出してきても、[はい(Y)]をクリックしてしまいます。

2.前項で作成したクリックActivityのセレクターを、UI Explorerで開く
image.png
(※ハンバーガーメニュー(≡)をクリックしてもUI Explorerが出てこないVerの場合は、[セレクターを編集]画面の左下にある[UI Explorerで開く]から開けます)
UIExplorerで開く.png

3.[アンカーを選択]をクリック
アンカーを選択.PNG

4.メッセージボックスのメッセージ要素を指定
image.png

5.完成
image.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

サンプル使用した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

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4