あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、取り上げたりしています。

VBScript で Excel にアドインを自動でインストール/アンインストールする方法

はじめに

業務で Excel の便利なアドインを作成することがあると思いますが、問題になるのがその配布方法です。

基本的に、Excel のアドインファイルは、%appdata%\Microsoft\AddIns フォルダにコピーします。Windows Vista/7/8/8.1/10 であれば、以下のフォルダになります。

  • C:\Users\ [User]\AppData\Roaming\Microsoft\AddIns

しかし、[User] フォルダがユーザーによって異なること、AppData フォルダが隠しフォルダになっているため、一般ユーザーがこのフォルダにアクセスするのは、少し敷居が高いです。

また、Excel のアドインはファイルをコピーしただけではアドインとして登録されず、Excel のオプションから有効にする必要があり、これも手間です。

この2つの作業の自動化は、VBScript を使用すれば、インストール、アンインストールとも可能です。

今回は、当ブログで配布している「Excel CSV I/O」を例にとって、VBScript による Excel アドインのインストールとアンインストールのサンプルコードをご紹介します。

動作確認は、Excel 2007/2010/2013 で行っています。

なお、ファイルはShift-JISで保存してください。UTF-8で保存すると「終了していない文字列型の定数です」というエラーが発生します。また、実行前にExcelを終了しておいてください。

Excel アドインのインストール

Excel のアドインを、%appdata%\Microsoft\AddIns にコピー後、アドインを Excel に登録するサンプルコードです。addInName と addInFileName をご自身の環境に合わせるだけで動作します。

なお、Excel アドインは、このサンプルコードのインストーラーと同じフォルダにあるものとします。

On Error Resume Next

Dim installPath
Dim addInName
Dim addInFileName
Dim objExcel
Dim objAddin

'アドイン情報を設定
addInName = "Excel CSV I/O"
addInFileName = "ExcelCsvIO.xlam" 

IF MsgBox(addInName & " アドインをインストールしますか?", vbYesNo + vbQuestion) = vbNo Then
  WScript.Quit
End IF

Set objWshShell = CreateObject("WScript.Shell")
Set objFileSys = CreateObject("Scripting.FileSystemObject")

'インストール先パスの作成
'(ex)C:\Users\[User]\AppData\Roaming\Microsoft\AddIns\[addInFileName]
installPath = objWshShell.SpecialFolders("Appdata") & "\Microsoft\Addins\" & addInFileName

'ファイルコピー(上書き)
objFileSys.CopyFile  addInFileName ,installPath , True

Set objWshShell = Nothing
Set objFileSys = Nothing

'Excel インスタンス化
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add

'アドイン登録
Set objAddin = objExcel.AddIns.Add(installPath, True)
objAddin.Installed = True

'Excel 終了
objExcel.Quit

Set objAddin = Nothing
Set objExcel = Nothing

IF Err.Number = 0 THEN
   MsgBox "アドインのインストールが終了しました。", vbInformation
ELSE
   MsgBox "エラーが発生しました。" & vbCrLF & "実行環境を確認してください。", vbExclamation
End IF

Excel アドインのアンインストール

Excel のアドインの登録を解除後、%appdata%\Microsoft\AddIns にあるアドインファイルを削除するサンプルコードです。上記インストールのサンプルコードと対になります。addInName と addInFileName をご自身の環境に合わせるだけで動作します。

On Error Resume Next

Dim installPath
Dim addInName
Dim addInFileName
Dim objExcel
Dim objAddin

'アドイン情報を設定
addInName = "Excel CSV I/O"
addInFileName = "ExcelCsvIO.xlam" 

IF MsgBox(addInName & " アドインをアンインストールしますか?", vbYesNo + vbQuestion) = vbNo Then
  WScript.Quit
End IF

'Excel インスタンス化
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add

'アドイン登録解除
For i = 1 To objExcel.Addins.Count
  Set objAddin = objExcel.Addins.item(i)
  If objAddin.Name = addInFileName Then
    objAddin.Installed = False
  End If
Next

'Excel 終了
objExcel.Quit

Set objAddin = Nothing
Set objExcel = Nothing

Set objWshShell = CreateObject("WScript.Shell")
Set objFileSys = CreateObject("Scripting.FileSystemObject")

'インストール先パスの作成
'(ex)C:\Users\[User]\AppData\Roaming\Microsoft\AddIns\[addInFileName]
installPath = objWshShell.SpecialFolders("Appdata") & "\Microsoft\Addins\" & addInFileName

'ファイル削除
If objFileSys.FileExists(installPath) = True Then
  objFileSys.DeleteFile installPath , True
Else
  MsgBox "アドインファイルが存在しません。", vbExclamation
End If

Set objWshShell = Nothing
Set objFileSys = Nothing

IF Err.Number = 0 THEN
   MsgBox "アドインのアンインストールが終了しました。", vbInformation
ELSE
   MsgBox "エラーが発生しました。" & vbCrLF & "実行環境を確認してください。", vbExclamation
End IF

おわりに

Excel のアドインは便利なのに配布(インストール)で苦労することが多いと思いますが、上記方法を取ることにより簡単に配布を自動化することができます。配布中止(アンインストール)も簡単です。

是非、活用したいですね。

関連記事

Word や PowerPoint のアドインのインストール記事です。

www.aruse.net

www.aruse.net