WindowsのUIをVBAから操作したいと考えたとき、「UIAutomationClient.dll」を使えば、ボタンやリストなどのUI要素を取得・操作できる強力な手段になります。
しかし、VBAでよく使われる CreateObject (遅延バインディング)を使って UIAutomationClient.CUIAutomation を生成しようとすると、エラーが発生します。
CreateObject (遅延バインディング)では、COM オブジェクトとして登録されている必要があり、プログラム識別子がないと駄目とのことです。
そのため、VBAでUI Automationを使いたい場合は、早期バインディング(参照設定を使う)を行う必要があります。
COMオブジェクトとは?
COM(Component Object Model)は、Windowsで広く使われている技術で、CreateObject("Excel.Application") のように、プログラムから外部オブジェクトを生成・操作する仕組みです。COMオブジェクトとして登録されているライブラリは、レジストリにProgID(プログラム識別子)を持ち、VBAから簡単に呼び出すことができます。
UIAutomationClient.dll の制限
UIAutomationClient.dll は、.NET Framework 用に設計されたマネージドライブラリであり、COMとしてのProgIDが存在しないため、CreateObject では呼び出せません。代わりに、VBAで使うには「参照設定」を使ってライブラリを明示的に読み込む必要があります。
参照設定による利用方法
VBAエディタを開き、[ツール] → [参照設定] を選択し、「UIAutomationClient」にチェックを入れます。
CreateObject 関数でFileSystemObjectを遅延バインディングした事例は以下です。
以上、Excel VBAでUIAutomationClientでUIを操作する場合は参照設定が必要という備忘録です。