【问题标题】:Last modification date of open workbook打开工作簿的最后修改日期
【发布时间】:2013-05-21 05:15:00
【问题描述】:

Vba 新手。需要一个函数来输出打开的工作簿的最后修改日期。这是我目前所拥有的,但我收到一条消息,当我调用函数时我的公式包含错误:

Function LastWBModDate(wbname)

    ActivateWB (wbname)
    LastWBModDate = Format(FileDateTime(ActiveWorkbook.FullName), "m/d/yy h:n ampm")

End Function

Public Function ActivateWB(wbname As String)

    If IsWBOpen(wbname) Then
        Workbooks(wbname).Activate
    Else
        MsgBox "Workbook : " & wbname & " is not open " & vbNewLine
    End If

End Function

Public Function IsWBOpen(wbname As String) As Boolean

    On Error Resume Next
    If Workbooks(wbname) Is Nothing Then
        IsWBOpen = False
    Else
        IsWBOpen = True
    End If

End Function

谢谢!

【问题讨论】:

  • 你是怎么调用这个函数的?来自工作表,还是来自其他 VBA 代码?从工作表调用的函数的功能受到限制:例如,它不能导致激活不同的工作簿。
  • 很高兴知道@TimWilliams。我试图从工作表中调用该函数。

标签: vba excel


【解决方案1】:
Function LastWBModDate(wbname As String)
Dim rv, wb As Workbook

    rv = "workbook?" 'default return value

    On Error Resume Next
    Set wb = Workbooks(wbname)
    On Error GoTo 0

    If Not wb Is Nothing Then
        rv = Format(FileDateTime(wb.FullName), "m/d/yy h:n ampm")
    End If

    LastWBModDate = rv

End Function

【讨论】:

  • 我很好奇为什么需要格式化。 FileDateTime 不返回 DateTime 数据类型吗?如果 wb 为 Nothing,为什么不直接返回此数据类型(或 cvErr(xlErrNA))。这样,您可以使用 Excel 中的返回类型进行简单的数学运算,并利用 Excel 的本机 IfError 和 IsError 函数(而不是仅仅为了进行数学运算而必须将字符串转换为日期,并管理“工作簿?”被返回,所有这些都会导致不必要的进程开销,虽然在这种规模下可能不明显,但考虑到 UDF 的单线程性质,仍然是浪费)。
  • 您可以根据自己的喜好实现它 - 这只是一个示例,所以我反映了 OP 使用的内容。
【解决方案2】:

试试下面的代码:

你也可以参考这个link

将以下代码放在 ThisWorkbook 代码部分

Private Sub Workbook_Open()
    LastWBModDate
End Sub

将此代码放在任何标准模块中

Function LastWBModDate() As String

    Dim FSO As Object
    Dim File As Object

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set File = FSO.GetFile(ThisWorkbook.FullName)
    LastWBModDate = Format(File.DateLastModified, "m/d/yy h:n ampm")
    Msgbox LastWBModDate 
    Set FSO = Nothing
End Function

【讨论】:

  • 感谢您的快速响应,但有一些限制我应该明确说明:我需要修改时间的工作簿既不是 ThisWorkbook 也不是 ActiveWorkbook。这也是为了跨平台工作(包括已安装的驱动器),我宁愿不处理文件路径,因为我知道当调用公式时相关工作簿将打开。
  • @lajulajay 指定您的路径Set File = FSO.GetFile( <File Path>),如果存在且可访问,此功能将起作用。
  • Mac 上没有(假设这是跨平台的意思)
  • 是的,这需要在 Mac 上运行,因此需要不依赖路径的解决方案。
猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
相关资源
最近更新 更多