1

我写了一个插件,它在安装时添加了其他插件,因为部署一个插件比部署一大堆插件更容易。

问题:在Bootloader-Addin 之后End SubWorkbook_AddinInstall()刚刚添加/安装的插件从 VBE 中消失,不再安装。但它们仍被添加到插件菜单中。

问题:我可以在每台 PC 上手动安装每个插件,因为它不是一个大数字,但这仍然困扰着我,我似乎无法找到故障线路。我很感激你想到的每一个帮助我解决这个问题的想法。

引导加载程序插件:

Private Sub Workbook_AddinInstall()
    Const aiCount As Integer = 2
    Dim ai      As AddIn
    Dim aiTmp   As AddIn

    Dim i       As Integer
    Dim aiPath  As String

    Dim aiToBeInstalled(1 To aiCount) As String
    Dim aiInstalled(1 To aiCount)     As Boolean

    aiToBeInstalled(1) = "AddIn1.xla"
    aiToBeInstalled(2) = "AddIn2.xla"

    'AddIn added?
    For Each ai In AddIns
        For i = 1 To aiCount
            If ai.name = aiToBeInstalled(i) Then
                Set aiTmp = ai
                aiTmp.Installed = True
                aiInstalled(i) = True
                Exit For
            End If
        Next i
    Next ai

    'Add not already added AddIns
    For i = 1 To aiCount
        If Not aiInstalled(i) Then
            aiPath = GetDrivePath(volName:="somevolname", excludeDrives:="D") & _
                                "hidden\" & aiToBeInstalled(i)
            Set ai = AddIns.Add(aiPath, False)
            ai.Installed = True
        End If
    Next i

    Set ai = Nothing
    Set aiTmp = Nothing
End Sub ' After "End Sub" the addins are still added but not installed.

有趣的事情 在安装引导加载程序后,如果我运行这个 Sub per F5,Sub 添加插件就好了。并且表现得像你期望的那样。

编辑:Workbook_AddinInstall正在安装的插件 没有调用任何重要的东西,只是对菜单进行了一些更改。看到这里,真的让我很困惑。它的行为就好像插件没有与 相关联,Application所以它们不会留下来。

结论:这是我能做到的,如果你有任何想法,请告诉我。我目前正在研究一种解决方法,但我真的很想知道为什么这不起作用。

4

1 回答 1

0

您需要通过 VB 编辑器为当前工作簿项目安装加载项。.Install() 方法将在注册表中注册新的 GUID(作为 COM 对象库),但不会保留工作簿引用。

'//Start Code Snippet 

'--!!-->   This will add the reference to the workbook (on each computer). 
    '-->    if the reference is not already registered it (will/should) take 
    '-->    care of it for you..

Application.VBE.ActiveVBProject.References.AddFromFile :YOUR_FILE_PATH_HERE


'//End Code Snippet 

显然,将:YOUR_FILE_PATH_HERE替换为插件位置的路径...如果有帮助,请告诉我。如果没有,我还有一些技巧。谢谢,布赖恩。

于 2013-09-03T21:55:41.207 回答