Application.OnTime in加载项工作簿_打开

时间:2015-08-28 04:39:14

标签: excel vba excel-vba excel-2013 excel-addins

我已经构建了一个自定义Excel加载项,我正在尝试找到一种方法,以便在新版本的加载项可用时通过VBA提示用户。

我尝试使用workbook_open事件来检查最新版本,然后使用userform提示用户,但我发现当Excel加载一个触发userform的加载项时,Excel会停止加载用户实际尝试过的工作簿打开并重新加载加载项。因此,当用户窗体按我想要的方式工作时,用户会获得一个带有加载外接程序的空白(无读取页面)Excel外壳。

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

以下是我正在测试的代码:

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

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

我想知道是否有关于如何加载/设计加载项的内容,以防止它执行此类操作。

另外,您可以想到有不同的方法吗?

我读了Dick Kusleika关于这个主题的interesting blog post(和评论),但听起来有些人在每个子程序中都进行了版本检查......我有很多程序,所以这并不是'听起来像是一个很好的选择,虽然我可能不得不诉诸它。

1 个答案:

答案 0 :(得分:0)

嗯,时间至关重要,所以我采用了最不可取的选择:在每个程序开始时检查。

感兴趣的各方,我的表现如何:

在每个子程序开始的某处,我放了这行代码:

If Version_Check Then Call Notify_User

在我的版本控制模块中,我放了这个函数和程序:

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

因此,每次运行一个过程时,此代码都会检查公司网络上的版本,其修改日期时间大于已安装加载项的日期时间。

我仍然非常愿意接受检查新版本的替代方法,所以请随时发布回答。