Office関連

リボンのタブを選択するVBAマクロ

マクロでリボンのタブを選択する方法として、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での処理と比べると大分すっきりしていて良い感じです。

UIAutomationClient参照時にDLL読み込みエラーが発生した時の対処法前のページ

UI Automationの参考資料次のページ

関連記事

  1. Office関連

    「クラシックスタイルメニュー for Office 2010」のOffice 2013対応状況

    私が下記ページで公開しているフリーソフト「クラシックスタイルメニュー …

  2. Office関連

    Excel Web Appのブック埋め込みを試してみました。

    Microsoftが提供しているOffice Web Appsはいわば…

  3. Office アドイン

    [Office用アプリ]JavaScript API for Officeのポスター

    JavaScript API for Officeのオブジェクト、メソ…

  4. Office関連

    Gmail APIを使ってメール送信するVBAマクロ

    「「Gmail API」β版公開、連動アプリ開発を支援」にもあるように…

  5. Office関連

    PowerShellからNetOfficeを使ってExcelを操作する方法

    先日、Excel MVPの伊藤さんがPowerShellからExcel…

コメント

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

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP