Workbook.Open代码停止中途运行

时间:2016-12-21 18:34:46

标签: excel excel-vba vba

底部的代码

我正在为我的团队创建的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

1 个答案:

答案 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