【问题标题】:Application.OnTime in Add-In Workbook_Open加载项 Workbook_Open 中的 Application.OnTime
【发布时间】:2015-08-28 04:39:13
【问题描述】:

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

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

所以我考虑使用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(和 cmets),但听起来有些人在每个子程序中都进行了版本检查......我有很多程序,所以这听起来不像像一个不错的选择,虽然我可能不得不求助于它。

【问题讨论】:

  • 这里有一种不同的方法可能会引起人们的兴趣:excelguru.ca/…
  • @DougGlancy 有趣的概念。不幸的是,我的用户并不总是在线,而且有些用户的网络连接速度很慢,所以这个解决方案不太适合业务需求。 ://
  • @DougGlancy 我注意到您对迪克博文的评论。你还在用 FlyBar 吗?您是如何从服务器下载更新版本的插件的?
  • 我不再使用它了。这是一个非常疯狂的装置,但它确实奏效了。但是,它并没有加载自己的新版本,只是管理其他插件的版本控制。

标签: vba excel excel-2013 excel-addins


【解决方案1】:

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

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

在每个子过程开始的地方我放了这行代码:

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

因此,每次运行程序时,此代码都会检查我们公司网络上修改后的日期时间大于已安装插件的日期时间的版本。

我仍然对检查新版本的其他方法持开放态度,因此请随时发布答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2017-12-18
    相关资源
    最近更新 更多