[[20110921183619]] 『ユーザ定義関数(UDF)をVBAで完全にアンインストー』(たひら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザ定義関数(UDF)をVBAで完全にアンインストールしたい』(たひら)

 ユーザ定義関数を、拡張子"xla"や"xlam"のアドイン形式にして、下記のようにVBAにてアドイン登録(インストール)し有効/無効にすることはできますが、ファイルを削除しても「有効アドイン(A)」のリスト載ったままで、完全にアンインストール出来ない。手操作で左のチェックをクリックすると「アドイン'c:\Users\・・・\xxx.xla'が見つかりません。リストから削除しますか?」のメッセージが表示され、[はい(Y)]をクリックして初めてリストから完全に削除される。この手操作をVBA等のプログラムで実行する方法はありませんか?

(1) VBAでのユーザ定義関数"TEST01.xla"アドイン登録(インストール)

  AddInsPath="C:\Users\・・・\Misrosoft\AddIns"
'    ADDINファイルの格納フォルダのパスで、\・・・\部分はUSER-IDを含む。
'    また、Windows種別(XPとVista等)でパスが異なる
  AddInFile = AddInsPath & "\TEST01.xla"
  If Dir(AddInFile) = "" Then
     FileCopy "D:\UDF\TEST01.xla", AddInFile   'TEST01.xlaをAddInsフォルダーにコピー
  End If
  AddIns.Add Filename:=AddInFile      'TEST01.xlaをアドイン登録
  AddIns("TEST01").Installed = True   'アドイン登録したTEST01を有効にする

(2) 同上のアドイン削除(アンインストール)

  AddIns("TEST01").Installed = false   'アドイン登録したTEST01を無効にする
  Kill (AddInsFile)                    'TEST01.xalを削除

(注) VBAでは"AddIns.Delete Filename:=AddInFile"等、ADDINリストから削除メソッドを提供してない。


 自分ではアドインは使わない主義(?)なのでやったことはないけど、
「VBA アドインの無効化」として検索すると参考コードがいろいろありそう。
たとえば
http://www.happy2-island.com/excelsmile/smile03/capter00713.shtml
とか

 (ぶらっと)

 Excelが起動された状態だと方法が思いつきませんでしたが、
 Excelが閉じられた状態で

 アドインフォルダにあるTEST01.XLAを削除

 レジストリからアドイン一覧でチェックされているアドインを検索し、
 削除する

 という操作を行うとExcel起動時、アドイン一覧から消えています。
 但し、レジストリキーがWinやExcelのバージョンによって違う可能性が大きいので
 その確認はしなければなりませんが・・・。

 例 対象アドインファイル TEST01.XLA  win2000 & excel2002 の場合

 Excelの標準モジュールにて
 d:\UDF\TEST01.XLA というアドインファイルが存在するとして

 '===============================================================
 Option Explicit
 Const addinnm As String = "TEST01"
 Sub inst()
  Dim addinfile As String
  addinfile = Application.UserLibraryPath & addinnm & ".xla"
  If Dir(addinfile) = "" Then
     FileCopy "D:\UDF\" & addinnm & ".xla", addinfile   'TEST01.xlaをAddInsフォルダーにコピー
  End If
  AddIns.Add Filename:=addinfile      'TEST01.xlaをアドイン登録
  AddIns(addinnm).Installed = True   'アドイン登録したTEST01を有効にする
 End Sub

 上記のコードでTEST01.XLAがインストールされます。

 Excelを閉じてください

 Excel以外のVBAが起動するアプリここでは、Wordを起動します。

 Wordの標準モジュールに

 Option Explicit
 Const addinnm = "TEST01"
 Sub uninst()
    Dim addinfile
    Dim g0
    Dim opn
    Dim mystr
    With CreateObject("excel.application")
       addinfile = .UserLibraryPath & addinnm & ".xla"
       .Quit
    End With
    On Error Resume Next
    With CreateObject("scripting.filesystemobject")
       .DeleteFile addinfile
    End With
    With CreateObject("wscript.shell")
       g0 = 0
      Do
         opn = "OPEN"
         If g0 > 0 Then opn = opn & g0
         mystr = .RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Options\" & opn)
         If Err <> 0 Then Exit Do
         If mystr = """" & addinnm & ".xla""" Then
            MsgBox "find"
            .RegDelete "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Options\" & opn
            Exit Do
         End If
         g0 = g0 + 1
      Loop
   End With
 End Sub

 これを実行後、Excelを起動して確認すると、TEST01は、一覧から削除されていました。

 但し、前述のように
 HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Options\open
 レジストリキーが ExcelやWinによって、違う可能性がありますから
 対象バージョンで調べて見てください。

 Excelが閉じていなければ正常には、作動しませんでした。

 尚、レジストリを削除する処理がありますから、バックアップ等を行い、
 自己責任でお願いします。

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.