【VBA】UIAutomationで業務改善5

EdgeのCombobox操作

alone in my room寒くなってきたね♪手足が冷え冷えのjimです。ども✋

最近、VBAマクロのブラウザ操作の改修(IE⇒Edge)やってて、Combobox(Edge)の操作でハマったので記事にします😥

Comboboxの一覧を表示させることはできるのですが、UIAutomationで一覧の情報を選択できないという。。。

そして、ググると自分の記事がアホみたいに出てくるという。。。

ちなみに、まだUIAutomationで操作できてません。別の方法を紹介します。

とりあえず、前回の記事のようにEdgeの要素を取得(edgeElementのこと)したところから。

以下のようにしてやれば、Comboboxの一覧を表示させることが出来ます。アクティブウィンドウがVBEに切り替わると消えちゃうんですけどね。

一覧は表示されます。

でも、できないのよ。これから先の操作が。。

Edgeじゃなければ出来るぽいんだけど。。。

 

PostMessage

仕方ないからキー操作。しばらくはコレだね。

一度、Comboboxの一覧を開けば、一覧が閉じてもキー操作が利くみたいなのね。Comboboxがアクティブになるので、比較的扱いやすいかなって思ってます。UIAutomationで要素取得しながら制御文で何とかなりそう。

一応、『expandPattern.Expand』でウィンドウが最前面にくるのでSendkeysでもいけるかもしれないけど、なるだけ確実に操作したいのでEdgeのハンドルにキーを送信。

↓まず、Edgeのハンドルを取得します。

↓そして、Edgeのハンドルに上キーを送ります。

キーを押すってのが『&H100』です。KEYDOWNみたいな感じで定数にしておいた方が読みやすいと思います。←やれよ

ちなみに、これだけだと押した状態がキープされた気がする。UPも作った方がいいかも。。

上キーが『38』です。キーコードですね。これも定数にした方がいいかも。←やれよ

ウーン!ってすると。。。

あ、『13』はエンターね。

キーコードはググれば出てくると思います。

一応、自分でも簡単に調べる事ができるので、この記事で紹介しておきます。

 

キーコード

UserFormのボタンに『KeyDown』というイベントがあります。

このイベントはボタンがアクティブの時、押下されたキーコードを取得できるものです。(API使う方法もある)

ユーザーフォームを挿入してコマンドボタンを置き、ユーザーフォームに以下のコードを書いてみましょう。

ユーザーフォームを開いて上キーを叩くと、イミディエイトウィンドウに38が表示されるはずです。

つまりは、、、そゆこと。

ExcelのワークシートにActiveXのコマンドボタン置いても同じことができると思います。

 

 

はい。そゆ感じで、UIAutomationで全て操作できてないっていう😅

これから色々と大変かも。。。

疲れるぅ~😣

ってことで、またねぇ✋

 

まとめ

【VBA】UIAutomationで業務改善1

【VBA】UIAutomationで業務改善2

【VBA】UIAutomationで業務改善3

【VBA】UIAutomationで業務改善4

関連記事

ハンドルからメッセージの取得⇒

【VBA】SendMessageで文字列を取得