VBScriptでExcelアドインを有効にする方法

VBS

概要

このVBScriptは、Excelが開いているかどうかに関わらず、指定したアドインを自動的に追加・有効化するスクリプトです。Excelが既に起動している場合はそのままアドインを追加し、Excelが開いていない場合は起動後にアドインを追加し、処理完了後にExcelを終了します。

特徴

  • Excelが開いている場合も、開いていない場合も対応可能
  • Excelの完全な起動を待機してからアドインを追加
  • ユーザーのアドインフォルダから自動的にアドインをインストール
  • Excelが元々閉じていた場合、処理後に自動的に終了
  • Excel終了時にポップアップ(保存確認など)を抑制

動作の流れ

  1. Excelが既に開いているかを確認
  2. 開いていなければ、Excelを起動し、可視化してブックを開き、完全に初期化する
  3. ユーザーのアドインフォルダのパスを取得
  4. 指定したアドイン(MyAddin.xlam)を追加・有効化
  5. 成功・失敗のメッセージを表示
  6. Excelが元々開いていなかった場合は、自動的に終了

使用方法

  1. スクリプトを .vbs ファイルとして保存(例:InstallExcelAddin.vbs
  2. Book1.xlam を実際のアドインファイル名に変更
  3. .vbs ファイルをダブルクリックして実行
Const FILLE_NAME="Book1.xlam"' 追加するアドイン名を指定


Call ExcelAddinAutoInstallation


Sub ExcelAddinAutoInstallation()
    Dim objExcel, objAddin, excelWasRunning
    excelWasRunning = True

    ' Excelが開いているか確認
    On Error Resume Next
    Set objExcel = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        ' Excelが開いていない場合は新しく起動
        Set objExcel = CreateObject("Excel.Application")
        objExcel.Visible = True ' Excelを可視化して確実に起動させる
        objExcel.Workbooks.Add ' 空のワークブックを開いて完全起動を待つ
        excelWasRunning = False
    End If
    Err.Clear
    On Error GoTo 0

    ' ユーザーのアドインフォルダのパスを取得
    Dim addinPath
    addinPath = objExcel.Application.UserLibraryPath & FILLE_NAME 

    ' アドインを追加
    On Error Resume Next
    Set objAddin = objExcel.AddIns.Add(addinPath, True)
    If Err.Number <> 0 Then
        WScript.Echo "アドインの追加に失敗しました: " & addinPath
        If Not excelWasRunning Then 
            objExcel.DisplayAlerts = False
            objExcel.Quit ' Excelを閉じる
        End If
        WScript.Quit
    End If
    Err.Clear
    On Error GoTo 0

    ' アドインを有効化
    objAddin.Installed = True
    WScript.Echo "アドインが追加され、有効化されました: " & addinPath

    ' Excelがもともと開いていなかった場合は終了
    If Not excelWasRunning Then
        objExcel.DisplayAlerts = False
        objExcel.Quit
    End If

    ' クリーンアップ
    Set objAddin = Nothing
    Set objExcel = Nothing

End Sub

コメント

タイトルとURLをコピーしました