在加载项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时间的版本。
我仍然非常开放的替代方法来检查新版本,所以随时发表一个答案。