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

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

我已经写了一个公共小组,将使用Internet Explorer自动化检查我的网站的更新。 当我手动运行它工作正常。

我的问题是,我应该什么时候调用CheckForUpdate()子? 我试着把它放在Workbook_Open() ,但是我发现的问题是,如果它花费太长时间,它会阻止正确加载Excel。

有一个标准的方式,加载项作家检查更新? 为什么在Workbook_Open()有代码时Excel不加载工作Workbook_Open()

谢谢!

编辑 :这是我的整个代码。 如果将其添加到加载项工作簿,然后加载项被激活,我无法打开任何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 

更新 :我已经testing了三台电脑。 其中2人有Excel 2013,问题发生。 一个有Excel 2016,它没有问题。 我想支持所有的Excel版本,所以我仍然需要解决。

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

它看起来像是如果您的代码在工作簿可见之前运行,会导致问题。 我认为这与IE部分有关,比其他任何事情都要多。

我尝试使用Application.OnTime Now + TimeValue("00:00:15"), "CheckForUpdate" 。 问题是,如果用户启动Excel并在打开工作簿之前等待计时器,则会出现完全相同的问题。 我怀疑build议asynchronousVBScript的人将有完全相同的问题,但以一个更复杂的方式。

所以我们来简单吧 您要求比Workbook_Open()更好的放置代码的地方。 有一个。

以下是对我有用的东西:

开始一个新的加载项目。 将您的CheckForUpdatesfunction添加到新模块。 将以下代码添加到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 

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

请让我知道,如果这个工程。 祝你好运。