底部的代码
我正在为我的团队创建的AddIn的更新系统工作。
我创建了一个迷你'助手'文件。当它打开时,它会执行以下操作:
1)将自己保存到Application.StartupPath
2)卸载当前版本的AddIn
3)将最新版本的AddIn从网络驱动器复制到本地ADDINS文件夹
4)重新安装新版本的AddIn
5)关闭自己(帮助文件)
这样,只要有人打开Excel,他们就会始终拥有最新版本的AddIn。
如果有人从头开始打开Excel,或者他们直接打开Helper文件,则上述所有操作都按预期工作。但是,当我尝试从ADDIN升级时,它没有。
有一个'更新' AddIn上的按钮。单击该按钮(基本上)打开Helper文件。我们的想法是,如果打开Helper文件,它将自动更新AddIn。
然而,Helper代码(全部包含在Workbook_Open中)停止在以下位置运行: AddIns(sAddInName).Installed = False
没有任何错误或任何错误。如果我进入代码,在运行该行之后,AddIn运行其BeforeClose()代码,在完成之后,它就会停止,好像之后没有代码(尽管有)。 / p>
相关代码
帮助程序代码 - 已删除记录/错误处理
Private Sub Workbook_Open()
'Load Master Path and AddIn Path
Dim sAddInPath As String, sAddInMasterPath As String
sAddInPath = Environ$("APPDATA") & "\Microsoft\Addins\TAAA.xlam"
sAddInMasterPath = "...\TAAA - AddIn.xlam"
'If TAAA Helper Isn't Auto-Open, Set to Auto-Open
If ThisWorkbook.Path <> Application.StartupPath Then
ThisWorkbook.SaveAs Application.StartupPath & "\" & ThisWorkbook.Name
End If
'If AddIn Is Available Then Uninstall It
If bAddInAvailableToInstall("TAAA") Then
AddIns("TAAA").Installed = False
--------它在上线之后发出的声音---------
End If
'Copying Master AddIn to Local Path
FileCopy sAddInMasterPath, sAddInPath
'If AddIn Is Unavailable Then Add It
If Not bAddInAvailableToInstall("TAAA") Then
Dim myAddIn As AddIn
Set myAddIn = Application.AddIns.Add(Filename:=sAddInPath, CopyFile:=True)
End If
'Installing AddIn
AddIns("TAAA").Installed = True
ThisWorkbook.Close
End Sub
答案 0 :(得分:0)
我想出了一个盗版解决方法,以防有人想要解决这个问题。
Bootleg解决方法
我获取了在AddIns(sAddInName)之后运行的所有代码.Installed = False并将其复制到新的过程WorkbookOpen_Part2。
在AddIns(sAddInName).Installed = False行之前,我添加了一个Application.OnTime for Now + 1秒来运行WorkbookOpen_Part2。
然后,在AddIns(sAddInName)之后.Installed = False我取消了Application.OnTime调用。
这样,如果代码没有做出奇怪的停止,那么OnTime会立即取消并且永远不会运行。如果代码确实做了奇怪的停止,那么OnTime会在一秒钟之后恢复剩下的代码。
mdNextCheckTime = Now + TimeValue("00:00:01")
Application.OnTime mdNextCheckTime, "WorkbookOpen_Part2"
AddIns("TAAA").Installed = False
CancelCheck 'This cancels the Application.OnTime