Office関連

Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcelといった、Officeアプリケーションのバージョン情報を取得するスクリプトです。

通常であれば、各OfficeアプリケーションのApplication.Versionプロパティで取得できますが、私が欲しいのはバージョン情報ダイアログに表示される「Microsoft Word 2016 MSO (16.0.7668.7078) 32 ビット」のような長ったらしいバージョン情報です。

どこかのプロパティやレジストリに情報があるのかもしれませんが、調べるのが面倒だったので、UI Automationを使って直接ダイアログから文字列を抜き出すことにしました。

'UI Automation PowerShell Extensionsを使ってOfficeアプリケーションのバージョン情報ダイアログからバージョン情報を取得するVBScript
'参考Webページ:
'https://uiautomation.codeplex.com/
'https://www.ka-net.org/blog/?p=4946
Option Explicit

Dim app
Dim cls
Dim com
Dim i
Const DLL_Path = "C:\System\UIAutomation\UIAutomation.dll" 'UIAutomation.dllのパス

'アプリケーション選択
i = InputBox("バージョン情報を取得するアプリケーションを選択してください。" & vbNewLine & vbNewLine & _
             "1…Excel" & vbNewLine & _
             "2…Word" & vbNewLine & _
             "3…PowerPoint", "アプリケーション選択", 1)
If IsEmpty(i) = True Then Wscript.Quit
If IsNumeric(i) = False Then Wscript.Quit

Select Case i
  Case 1
    app = "Excel"
    cls = "XLMAIN"
  Case 2
    app = "Word"
    cls = "OpusApp"
  Case 3
    app = "PowerPoint"
    cls = "PPTFrameClass"
  Case Else
    app = "Excel"
    cls = "XLMAIN"
End Select

com = "powershell -Command """
com = com & "Add-Type -Assembly System.Windows.Forms;"
com = com & "ipmo '" & DLL_Path & "';"
com = com & "[UIAutomation.Preferences]::Highlight = $false;"
com = com & "while($true){"
com = com & "  Start-Sleep -s 1;"
com = com & "  $app = Get-UiaWindow -Class '" & cls & "';"
com = com & "  $dlg = $app | Get-UiaControlFirstChild;"
com = com & "  $title = $dlg | Read-UiaControlName;"
com = com & "  if($title.Contains('バージョン情報')){"
com = com & "    break;"
com = com & "  }"
com = com & "}"
com = com & "$text = $dlg | Get-UiaText -Name '*" & app & "*';"
com = com & "$v = $text | Read-UiaControlName;"
com = com & "[Windows.Forms.Clipboard]::SetText($v);"
com = com & "$dlg | Get-UiaButton -Name 'OK' | Invoke-UiaButtonClick;"""

CreateObject("WScript.Shell").Run com, 0

With CreateObject(app & ".Application")
  .Visible = True
  .CommandBars.ExecuteMso "About"
  WScript.Sleep 1000
  .Quit
End With

上記コードを実行するとInputBoxが表示され、入力した番号に応じて、Excel、Word、PowerPointのバージョン情報をクリップボードにコピーします。

仕組みとしては、この記事で紹介している「UI Automation PowerShell Extensions」を使って、ダイアログから文字列を取得しています。

若干安定性に欠けるのが難点ですが、手作業で行うよりは早くバージョン情報を取得できるので、とりあえずはこれで良しとします。

関連記事

【オトカドール】ライバルカード第3弾カード一覧前のページ

Adobe IDによるサインイン無しでAcrobat DCをインストールする方法次のページ

関連記事

  1. アイコン一覧

    Office 2013 アイコン一覧(T)

    ・Office 2013 アイコン一覧 NUM…

  2. Office関連

    Google翻訳で文字列を翻訳するVBAマクロ(IE操作版)

    下記記事にあるように、ニューラルネット機械翻訳の導入によって、Goog…

  3. アイコン一覧

    Office 365アイコン(imageMso)一覧(F)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  4. Excel

    PDFを他のファイル形式に変換するVBAマクロ

    「PDF 変換 Word VBA」といったキーワード検索でのアクセスが…

  5. Office アドイン

    YO OFFICE(Yeoman)を使ってOffice アドインのひな型を作成する方法

    Webアプリのひな型を一発で作ってくれる便利ツール「Yeoman」には…

  6. Office関連

    [VBA]CommandBars(“○○”).Controls.Addでメニ…

    Officeのユーザインタフェースがリボンに変わってから、下記のように…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP