はじめに
業務で 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 のアドインのインストール記事です。