2010年11月7日日曜日

EXCEL2003/2007アドインの自動登録の方法

最新のやり方
まずとこがでアンインストールのグローバル変数を定義
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の場合):

  1. アドインファイル(*.xla または *.xlam)を所定の場所にコピー、一般的には C:\Program Files\Microsoft Office\Templates\addin (デフォルト)です
  2. 手順①のコピー先を「信頼できる場所」に設定すること。EXCELの一番左上のボタンを押して > 「EXCELのオプション」  「セキュリティーセンター」  「セキュリティーセンターの設定」  「新しい場所の追加」  「参照」  「確認」 (※ステップ1のコピー先がデフォルトのフォルダーなら、ステップ2は省略できる)
  3. 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を別々作ったほうがいいと思います。

0 件のコメント:

コメントを投稿