shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】UIAutomationClientでUIを操作する場合は参照設定が必要

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で使うには「参照設定」を使ってライブラリを明示的に読み込む必要があります。

learn.microsoft.com

参照設定による利用方法

VBAエディタを開き、[ツール] → [参照設定] を選択し、「UIAutomationClient」にチェックを入れます。

CreateObject 関数でFileSystemObjectを遅延バインディングした事例は以下です。

shikumika.org

以上、Excel VBAでUIAutomationClientでUIを操作する場合は参照設定が必要という備忘録です。