マクロでリボンのタブを選択する方法として、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での処理と比べると大分すっきりしていて良い感じです。
この記事へのコメントはありません。