[Office VBA] Excel Addin Deploy Solution (增益集發佈方案)

  • 5003
  • 0
  • VBA
  • 2015-12-28

[Office VBA] Excel Addin Deploy Solution (增益集發佈方案)

我在這個主題上吃了一點苦頭,現在不記下來以後肯定會忘記

本篇目錄

增益集初步認識:

增益集自我管理:

  1. 安裝增益集
  2. 停用增益集
  3. 移除增益集

增益集預設目錄管理:

  1. 安裝增益集
  2. 移除增益集

增益集初步認識:

當 Excel VBA 寫好之後,另存新檔 *.xla 變成增益集,便可以外掛到 Excel,增益集預設會安裝到

C:\Users\ User Name \AppData\Roaming\Microsoft\AddIns

%appdata%\Microsoft\AddIns

image

 

Note:

  1. 增益集的工作表都會被隱藏
  2. 透過 ˊWorkbooks(“My Addin.xla”),取得增益集的工作簿

 

存成 *.xla 的檔案,可以看到 ThisWorkbook.IsAddin=true,只要將它改成 false,就會變回原來的 Excel 檔案

image

 

雙擊 *.xla 並不會將增益集安裝在 Excel Addin List,必需要調用 Application.AddIns.Add(“sample.xla”, True) 才行,值得注意的是 Application.AddIns 並沒有提供 Remove 方法

image

 


增益集自我管理:

安裝增益集

注意事項:

  1. 若只雙擊增益集,並不會開啟活頁簿,新增增益集時必須要有活頁簿存在
  2. ThisWorkbook 代表增益集
  3. ActiveWorkbook 代表活頁簿
  4. 在任何位置都可安裝
  5. 安裝成功會觸發 Workbook_AddinInstall 事件(在 Workbook_Open 之前),停用會觸發 Workbook_AddinUninstall事件 (在 Workbook_BeforeSave之前)

 

下段程式碼為自我安裝

Private m_AddinInstalled As Boolean

Private Sub Workbook_AddinInstall()
    m_AddinInstalled = True
    MsgBox "增益集:" & ThisWorkbook.Name & "安裝成功"
End Sub

Private Sub Workbook_Open()
    If Not ThisWorkbook.IsAddin Then Exit Sub
    If m_AddinInstalled Then Exit Sub
    If ActiveWorkbook Is Nothing Then Application.Workbooks.Add
    
    Dim myAddin As Excel.AddIn
    Set myAddin = Application.AddIns.Add(Me.FullName, True)
    myAddin.Installed = True
End Sub

 

成功後便可在 Addin List 看到已經新增的增益集

image

 

停用增益集

當我們不想使用這個增益集的時候,可以將它停用,項目勾勾拿掉,並關掉 Excel,Excel 關閉時,會寫入註冊機碼

HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Excel\Add-in Manager

image

調用 myAddin.Installed = false 也可以得到同樣效果

解除增益集

  1. 調用 VBA 自我解安裝,很可惜這個機制不存在,或許可以處理機碼將上步驟的機碼刪掉,只要 Excel 一關閉,機碼又長出來,所以無法在 *.xla 寫 VBA 處理
  2. 刪除 *.xla,當 Excel 找不到 *.xla 時就會跳出錯誤

image

 

在Add-Ins 還存留著訊息,因為機碼已經有記錄,只要將滑鼠點擊不存在的項目,就會跳出下圖錯誤,按下 Yes 就會移掉機碼了

image

 


增益集預設目錄管理:

上面的步驟很麻煩,所以將增益集複製到以下目錄

%appdata%\Microsoft\AddIns

Excel Add-Ins 會根據目錄底下的有 *.xla 建立項目,這意味著我不需要處理機碼就能把 Add-Ins 裡的項目移掉,這一切將變的很簡單

 

安裝增益集

我將特定的*.xla 貼到 %appdata%\Microsoft\AddIns (VBA Code:Application.UserLibraryPath) 目錄裡,然後再將它加入到 AddIns 裡,並啟用它

    If Dir(m_TargetAddinFilePath) <> vbNullString Then Exit Sub

    Dim fso As New FileSystemObject
    Call fso.CopyFile(m_SourceAddinFilePath, m_TargetAddinFilePath, True)

    Set m_Addin = Application.AddIns.Add(m_TargetAddinFilePath, True)
    m_Addin.Installed = True

    Call SetControlForAddin(m_Addin)
End Sub

 

移除增益集

則是在 %appdata%\Microsoft\AddIns 目錄刪掉特定的 *.xla

    If Dir(m_TargetAddinFilePath) = vbNullString Then Exit Sub

    m_Addin.Installed = False

    Dim fso As New FileSystemObject

    If Dir(m_TargetAddinFilePath) <> "" Then fso.DeleteFile m_TargetAddinFilePath
    Set m_Addin = Nothing
    Call SetControlForAddin(m_Addin)

    MsgBox "Excel 要全部關閉才能生效,即將關閉本程式", vbCritical, "關閉通知"
    Unload Me
End Sub

 


 

文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/10/27/147105.aspx

範例下載:

https://dotblogsamples.codeplex.com/SourceControl/latest#Sample.SimpleAddinManager/

https://dotblogsfile.blob.core.windows.net/user/yc421206/1410/2014102716456566.zip

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo