Excel加载项,何时检查更新?

时间:2016-12-14 19:34:52

标签: excel excel-vba vba

我已经制作了一个有用的Excel VBA插件,我几乎准备好发布了。我只有一个问题。我希望加载项在运行时检查更新,并通知用户他们是否使用旧版本。

我已经编写了一个公共子程序,它将使用Internet Explorer自动化检查我的网站以获取更新。我手动运行时工作正常。

我的问题是,我什么时候应该致电CheckForUpdate()子?我已尝试将其放入Workbook_Open(),但我发现的问题是,如果耗时太长,则会阻止Excel正确加载。

加载项编写器是否有标准方法检查更新?当我在Workbook_Open()中有代码时,Excel为什么不加载工作簿?

谢谢!

修改:这是我的整个代码。如果将其添加到加载项工作簿,然后激活加载项,则无法打开任何Excel文件。

Private Sub Workbook_Open()
    Call CheckForUpdate
End Sub

Public Sub CheckForUpdate()
    Dim ie As Object
    Set ie = CreateObject("internetexplorer.application")
    ie.Visible = False
    ie.navigate "https://example.com/checkforupdate"

    Do While ie.readystate <> 4: DoEvents: Loop

    Set HTML = ie.document
    If HTML.DocumentElement.innerHTML = "update is available" Then
        MsgBox "An update is ready. Go get it!"
    Else
        MsgBox "no update"
    End If

    Set ie = Nothing
End Sub

更新:我现在已在三台计算机上进行了测试。其中2个有Excel 2013,问题就出现了。一个有Excel 2016,它没有问题。我想支持所有Excel版本,所以我仍然需要解决。

1 个答案:

答案 0 :(得分:3)

好的,我运行你的代码并使用Excel 2013重现了这个问题。我没有测试任何其他版本。

看起来会发生的情况是,如果您的代码在工作簿可见之前运行,则会导致问题。我认为它与IE部分有关,而不是其他任何事情。

我尝试使用Application.OnTime Now + TimeValue("00:00:15"), "CheckForUpdate"。问题在于,如果用户启动excel并在打开工作簿之前等待计时器,则会出现完全相同的问题。我怀疑建议异步VBScript的人会有完全相同的问题,但是要复杂得多。

所以让我们变得简单。您要求提供比Workbook_Open()更好的代码放置代码。有一个。

这对我有用:

启动新的加载项项目。将您的CheckForUpdates功能添加到新模块。将以下代码添加到ThisWorkbook

Private WithEvents App As Application

Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
    CheckForUpdate
End Sub

Private Sub Workbook_Open()
    Set App = Application
End Sub

使用此代码,您的更新过程将在激活工作簿时运行。它似乎不会引起问题。

如果有效,请告诉我。祝你好运。