2014/03/12

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


はじめに

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

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

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

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

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

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

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

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

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

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


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから