在加载项Workbook_Open中的Application.OnTime

我已经构build了一个自定义的Excel加载项,目前我正试图找出一种方法来通过VBA提示用户在新版本的加载项可用时。

我尝试使用workbook_open事件来检查最新版本,然后用用户窗体提示用户,但我发现,当Excel加载一个加载项触发一个用户窗体时,Excel停止加载用户实际尝试打开的工作簿和重新加载加载项。 所以虽然用户表单像我想要的那样工作,但是用户却得到一个空白(不读取表单)Excel加载的加载项。

所以我考虑使用Application.OnTime来推迟VBA,直到加载项和目标文件都打开。 我在这里和这里都有这样的印象,这是可能的,但我只能使它在.xlsm文件而不是.xlam文件中工作。

以下是我正在testing的代码:

 Sub Workbook_Open() Application.OnTime Now() + TimeValue("00:00:05"), "Test_Addin.xlam!Versioning.Notify_User" End Sub 

在一个普通的代码模块中:

 Sub Notify_User() MsgBox "Hello" End Sub 

所以,我的问题: 我在这里做错了什么?

我想知道是否有一些关于如何加载/加载的devise,使它不允许执行这种types的行动。

或者,有没有不同的方式可以做到这一点,你可以想到?

我读到了迪克·库斯莱卡(Dick Kusleika)关于这个话题的一篇有趣的博客文章 (和评论),但是听起来好像有人在每个子程序中都进行了版本检查…我有很多程序,所以这听起来不是很好另一种方法,虽然我可能不得不诉诸于此。

那么,时间是至关重要的,所以我采取了最不理想的select:在每个程序的开始检查。

对于感兴趣的各方,我是这样做的:

在每个子程序开始的某个地方,我把这行代码:

 If Version_Check Then Call Notify_User 

并在我的版本模块中,我把这个function和过程:

 Function Version_Check() As Boolean Installed = FileDateTime(ThisWorkbook.FullName) Available = FileDateTime("\\NetworkDrive\Test_AddIn.xlam") If Installed < Available Then Version_Check = True End Function Sub Notify_User() Update_Check.Show End Sub 

因此,每次执行过程时,此代码都会检查我们企业networking上的修改date时间大于已安装加载项的date时间的版本。

我仍然非常开放的替代方法来检查新版本,所以随时发表一个答案。