マクロでリボンのタブを選択する方法として、ActivateTabやActivateTabMsoメソッドを使う方法やMSAAを使う方法がありますが、今回はUI Automationでタブを選択するマクロを紹介します。
※ UIAutomationClient(UIAutomationCore.dll)要参照
※ UIAutomationClient参照時にエラーが発生する場合は「UIAutomationClient参照時にDLL読み込みエラーが発生した時の対処法」参照
Option Explicit
Public Sub Sample()
MsgBox "[ホーム]タブを選択します。", vbSystemModal
SelectRibbonTab "ホーム"
MsgBox "[ファイル]タブを選択します。", vbSystemModal
SelectRibbonTab "ファイル タブ"
End Sub
Public Sub SelectRibbonTab(ByVal TabName As String)
'リボンのタブを選択
Dim uiAuto As UIAutomationClient.CUIAutomation
Dim elmRibbon As UIAutomationClient.IUIAutomationElement
Dim elmRibbonTab As UIAutomationClient.IUIAutomationElement
Dim cndProperty As UIAutomationClient.IUIAutomationCondition
Dim aryRibbonTab As UIAutomationClient.IUIAutomationElementArray
Dim ptnAcc As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern
Dim accRibbon As Office.IAccessible
Dim i As Long
Set elmRibbonTab = Nothing '初期化
Set uiAuto = New UIAutomationClient.CUIAutomation
Set accRibbon = Application.CommandBars("Ribbon")
Set elmRibbon = uiAuto.ElementFromIAccessible(accRibbon, 0)
Set cndProperty = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "NetUIRibbonTab")
Set aryRibbonTab = elmRibbon.FindAll(TreeScope_Subtree, cndProperty)
For i = 0 To aryRibbonTab.Length - 1
If aryRibbonTab.GetElement(i).CurrentName = TabName Then
Set elmRibbonTab = aryRibbonTab.GetElement(i)
Exit For
End If
Next
If elmRibbonTab Is Nothing Then Exit Sub
Set ptnAcc = elmRibbonTab.GetCurrentPattern(UIA_LegacyIAccessiblePatternId)
ptnAcc.DoDefaultAction
End Sub
Microsoft Communityにあった質問「【PowerPoint VBA】 グラフ内のデータラベルのインデックスを取得するコード」の回答用に書いたコードの一部抜粋になります。
MSAAでの処理と比べると大分すっきりしていて良い感じです。















この記事へのコメントはありません。