最新のやり方
まずとこがでアンインストールのグローバル変数を定義
Public gUninstall As Boolean
xlaののWorkbook_Openに
xla開くときに自動インストール
Private Sub Workbook_Open()
Workbooks.Add
AddIns.Add fileName:=ThisWorkbook.FullName
AddIns(getShortName(ThisWorkbook.name)).Installed = True
End sub
ボタンを定義削除
Sub delMenu()
On Error Resume Next
Application.CommandBars(1).Controls("&テスト").Delete
Application.CommandBars(1).Controls("&アンインストール").Delete
End Sub
ボタンを定義追加
Sub addMenu()
Dim objButton As CommandBarControl
On Error Resume Next
Application.ScreenUpdating = False
With Application.CommandBars(1)
If .Controls("&テスト") Is Nothing Then
'\\Create Button with image
Set objButton = .Controls.Add(msoControlButton, before:=11)
With objButton
.Style = msoButtonIconAndCaption
.Caption = "&テスト"
.FaceId = 8
.OnAction = "テストSub"
End With
End If
If .Controls("&アンインストール") Is Nothing Then
Set objButton = .Controls.Add(msoControlButton, before:=11)
With objButton
.Style = msoButtonIconAndCaption
.Caption = "&アンインストール"
.FaceId = 3838
.OnAction = "uninstall"
End With
End If
End With
Application.ScreenUpdating = True
End Sub
アドインをアンインストール
Sub uninstall()
Call delMenu
gUninstall = True
AddIns(getShortName(ThisWorkbook.name)).Installed = False
End Sub
最後、完全に自分を殺す
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If gUninstall Then Call delMenu
End Sub
以上。
以下は古いやり方
**************************************************************************
EXCEL2000-2003のアドインは *.xla
EXCEL2007のアドインは *.xlam(マクロ有効)
しかし配布するとき、ユーザに一連の操作をし、アドインとして登録してあげないと使えない。
具体の手順は(
EXCEL2007の場合):
- アドインファイル(*.xla または *.xlam)を所定の場所にコピー、一般的には C:\Program Files\Microsoft Office\Templates\addin (デフォルト)です
- 手順①のコピー先を「信頼できる場所」に設定すること。EXCELの一番左上のボタンを押して > 「EXCELのオプション」 > 「セキュリティーセンター」 > 「セキュリティーセンターの設定」 > 「新しい場所の追加」 > 「参照」 > 「確認」 (※ステップ1のコピー先がデフォルトのフォルダーなら、ステップ2は省略できる)
- EXCELの一番左上のボタンを押して > 「EXCELのオプション」 > 「アドイン」 > 「管理→EXCELアドイン」 > 「設定」 > 「アドイン→ティックを入れて」 > 「OK」
以上のめんどくさい設定をユーザにやってもらわないと行けない。そしてそのことは開発者の「作品をより多くの人に使ってもらう」という目的の大きいな壁です。
もっと簡単な方法はないか?
(
EXCEL2007の場合):
C:\Documents and Settings\UserName\Application Data\Microsoft\excel\XLSTART
※ショートキー:Win+rで開く「ファイル名を指定して実行」に %AppData%\Microsoft\excel\XLSTART で一発行ける
もう一個は
%AppData%\Microsoft\AddIns
というフォルダーは一種特別のフォルダー、EXCEL起動時、このフォルダーに入っているスクリプトファイル(ここでは*xlaまたは*.xlamを指しています)をすべて読み込みます。なので、最初にアドインファイルを実行するとき、自分自身をこのフォルダーにコピーすれば、上記面倒な設定は要らなくなる。
ソースコードの一部
Private Sub Workbook_Open()
Dim xlstart As String
'ファイルシステムオブジェクトの宣言
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
'XLSTARTフォルダー取得
xlstart = CStr(Environ("USERPROFILE") & "\Application Data") & "\Microsoft\Excel\XLSTART"
'もしフォルダー存在すれば
If UCase(Dir(xlstart, vbDirectory)) = "XLSTART" Then
'もしファイル存在しなければ
If Dir(xlstart & "\" & ThisWorkbook.Name) = "" Then
'自分自身をコピーします
FSO.CopyFile ThisWorkbook.FullName, xlstart & "\" & ThisWorkbook.Name
End If
End If
Set FSO = Nothing
End Sub
こうすれば、今後ユーザがEXCELを開けば、アドインは有効になります。
EXCEL2000-2003とEXCEL2007両方対応する為にxlaとxlamを別々作ったほうがいいと思います。