有没有一种方法临时文件Excel加载项来知道它是公开的只读文件已被更新,因为最终用户打开Excel?

这有点难以解释,所以如果你愿意,请和我一起裸照。

我在工作中为我的部门创build了一个Excel加载项( .xlam )。 我有这样的设置:

  1. 公司的共享networking驱动器上有一个公共(只读)版本的附加组件。 这是所有部门人员在其计算机上安装的文件。

  2. 为了确保公用版本在员工电脑上正确安装(不是保存在本地用户的附加文件夹中),我创build了一个vbscript,以正确的方式自动为所有用户安装它,这使我能够正确和毫不费力地更新未来的附加function。

  3. 我有一个在我的计算机上安装和存储的本地附加组件的开发版本,我可以在将它们部署到共享networking驱动器上的公共版本之前进行更改和testing更新。

  4. 当我准备部署更新时,我有一个closures公共文件的只读属性的Sub,用开发版本(本身)的一个副本覆盖文件,然后重新打开Read-Only属性新更新的公共文件。

#4可以完成,不pipe是否有任何用户当前正在使用附加组件,因为公共文件是只读的。 为只读,当用户打开一个Excel实例时,他们实际使用的是他们自己的临时副本,保存在临时文件夹中的公用文件。

这个方法对我来说唯一的缺陷是当我必须在一天中间部署一个修补程序。 如果用户在部署修补程序时已经打开Excel,则必须重新启动Excel才能获得更新的版本。 这意味着必须发送电子邮件爆炸,并依赖于用户看到电子邮件,以便知道他们必须重新启动Excel才能使更改生效。 我更喜欢有附加检查,如果它是更新例程,并提醒用户通过MsgBox ,这将指示他们重新启动Excel。 我有一个如何做到这一点的想法,但不知道它是否会按预期工作。

现在我的问题。

有没有办法让我通过比较用户的临时副本的上一次修改date和公共加载项的上次修改date或他们都有相同的date来检查是否是最新版本的附加检查?

我知道我不得不使用OnTime来安排例行检查,但我不确定看这两个date是否准确。

如果这不起作用,我还可以检查用户是否使用更新版本?

我会添加一个额外的工作表到您的添加和使用ExecuteExcel4Macro检查版本更新。

在这里输入图像说明


 Public Sub CheckForUpdates() Const MasterPath As String = "C:\stackoverflow" Const MasterFileName As String = "MasterFile.xlam" Const WorkSheetName As String = "Settings" Dim Msg As String, Version As String Dim ButtonNumber As Long Version = getVersion(MasterPath, MasterFileName, WorkSheetName, 2, 2) With ThisWorkbook.Worksheets("Settings").Range("B2") If .Value <> Version Then Msg = getVersion(MasterPath, MasterFileName, WorkSheetName, 4, 2) ButtonNumber = IIf(getVersion(MasterPath, MasterFileName, WorkSheetName, 3, 2), vbCritical, vbInformation) MsgBox Msg, ButtonNumber, "Update Available" Else Application.OnTime Now + 4 / 24, "CheckForUpdates" End If End With End Sub Function getVersion(MasterPath As String, MasterFileName As String, WorkSheetName As String, RowNumber As Long, ColumnNumber As Long) If Right(MasterPath, 1) <> "\" Then MasterPath = MasterPath & "\" getVersion = ExecuteExcel4Macro("'" & MasterPath & "[" & MasterFileName & "]" & _ WorkSheetName & "'!R" & RowNumber & "C" & ColumnNumber) End Function