我有一个Excel加载项(.xlam
)我为我的部门创建了工作。我把它设置成这样:
#4无论我在更新时是否有任何用户当前正在使用附加组件都可以完成,因为公共文件是只读的。作为只读,当用户打开Excel实例时,他们实际使用的是他们自己的临时文件夹中保存的公共文件的临时副本。
这种方法对我来说唯一的缺陷就是我必须在一天中间部署一个修补程序。如果用户在部署此修补程序时已打开Excel,则必须重新启动Excel才能获得更新的版本。这意味着必须发送电子邮件,并依赖于看到电子邮件的用户,以便知道他们必须重新启动Excel才能使更改生效。我更喜欢使用附加组件检查它是否已更新例程,并通过MsgBox
提醒用户,这将指示他们重新启动Excel。我知道如何做到这一点,但我不确定它是否会按预期工作。
现在我的问题。
有没有办法让我通过比较用户的临时副本的上次修改日期和公共附加组件的上次修改日期来进行附加检查以查看它是否是最新版本,还是它们都具有相同的日期?
我知道我必须使用OnTime
安排例行检查,但我不确定看这两个日期是否准确。
如果这不起作用我怎么能检查用户是否使用更新版本?
我会在您的添加中添加一个额外的工作表,并使用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