[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザ定義関数(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.