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関連

    フォルダ(サブフォルダ含む)内の特定の拡張子のファイルに処理を行うVBAマクロ

    「Wordマクロ サブフォルダ ファイル処理」といったキーワードでのア…

  2. Office関連

    Excel REST APIをPowerShellから呼び出す方法

    以前Excel REST APIをVBAから呼び出す方法を紹介しました…

  3. Office関連

    「2014年12月のWindows Update以降コマンドボタンが使えなくなった」トラブルへのFi…

    当ブログでも「KB2553154の更新プログラムをアンインストールする…

  4. アイコン一覧

    Office 2013 アイコン一覧(NUM)

    ・Office 2013 アイコン一覧 NUM…

  5. Windows 10

    Microsoft Edgeを起動するVBScript

    前回の記事の関連ですが、下記コードのようにShellExecuteメソ…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP