有没有办法让临时文件Excel加载项知道自最终用户打开Excel以来它是否已更新公共只读文件?

时间:2016-10-23 22:22:39

标签: excel vba excel-vba excel-2007

我有一个Excel加载项(.xlam)我为我的部门创建了工作。我把它设置成这样:

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

  2. 为了确保在员工计算机上正确安装公共版本(未在本地保存在用户的附加文件夹中),我创建了一个vbscript,它以正确的方式自动为所有用户安装它,这使我能够

  3. ,以便在将来正确,轻松地更新附加组件。

  4. 我在我的计算机上本地安装并存储了Add-On的开发版本,在将其部署到共享网络驱动器上的公共版本之前,我可以对其进行更改和测试更新。

  5. 当我准备部署更新时,我有一个Sub关闭公共文件的只读属性,用开发版本(本身)的副本覆盖文件,然后转为Read - 仅为新更新的公共文件返回属性。

  6. #4无论在我更新时是否有任何用户当前正在使用附加组件都可以完成,因为公共文件是只读的。作为只读,当用户打开Excel实例时,他们实际使用的是他们自己的临时文件夹中保存的公共文件的临时副本。

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

    现在提出我的问题。

    通过比较用户的临时副本的上次修改日期和公共加载项的 Last,我是否可以通过Add-On检查来查看它是否是最新版本修改日期或它们是否都具有相同的日期?

    我知道我必须使用OnTime安排例行检查,但我不确定看这两个日期是否准确。

    如果这不起作用我怎么能检查用户是否使用更新版本?

1 个答案:

答案 0 :(得分:2)

我会在您的添加中添加一个额外的工作表,并使用ExecuteExcel4Macro检查版本更新。

enter image description here

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