【问题标题】:Determine if an Excel workbook has ever been saved?确定是否曾经保存过 Excel 工作簿?
【发布时间】:2019-01-02 22:43:24
【问题描述】:

如何使用 VBA 判断 Excel 工作簿是否已保存?

我想知道单击保存是否会将文档保存到现有位置或提示我选择保存位置。

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    If ActiveWorkbook.Path = vbNullString Then
        'actions if the active workbook hasn't been saved yet go here
    Else
        '....
    End If
    

    【讨论】:

    • 也喜欢这个解决方案。 - 顺便说一句,也可以考虑使用ThisWorkbook.Path(或者甚至在工作簿集合中循环搜索匹配的名称,如“Book1”等)。
    • 好@Jalal!我刚刚接受了你的回答。这是迄今为止最简单的解决方案。我可以告诉你的代码做了什么而无需在 cmets 中解释。
    【解决方案2】:

    名称(例如 Book1)是一个线索,尽管我想有人可以简单地使用该名称保存他们的工作簿。

    更清晰的检查可能就像只对保存的工作簿起作用的工作表函数一样简单。

    'the following returns an empty string if used on an unsaved workbook
    =CELL("filename", A1)
    

    在 VBA 中,.Address 属性在与 External:=True 参数一起使用时将不返回任何路径。

    ?range("A1").Address(external:=true)
    [Book1]Sheet5!$A$1
    

    【讨论】:

    • 谢谢吉普!我打算同时发布问题和答案,但我没有这样做。看起来你在两者之间发布了你的答案。似乎这也有效,尽管我会单独为 Book1 线索 +1; )
    【解决方案3】:

    我发现这很有帮助。 .BuiltinDocumentProperties("last save time") 返回一个 vbDate (VarType = 7) 表示最后一次保存工作簿的时间,仅当文件至少保存一次时。否则返回vbObject (VarType = 9)。

    Function WbSavedAtLeastOnce(ByVal target As Workbook) As Boolean
    ' Returns TRUE if the target workbook has been saved at least once.
    
        ' .BuiltinDocumentProperties("last save time") returns a vbDate
        '   only if the file has been saved at least once.
        WbSavedAtLeastOnce = VarType( _
                target.BuiltinDocumentProperties("last save time")) = 7
    End Function
    

    像这样使用函数:

    Sub Test()
        If WasSavedAtLeastOnce(ActiveWorkbook) Then
            MsgBox "This file has been saved at least once."
        Else
            MsgBox "This file has never been saved."
        End If
    End Sub
    

    【讨论】:

      【解决方案4】:

      还有另一种方法 - 如果您可以编程访问 VBA 项目(信任中心设置)。

      (从调试窗口)

      对于 thisworkbook.VBProject.VBComponents 中的每个 n:?n.name、n.type、n.saved:下一个

      查看 ThisWorkbook 的 .saved 属性值。

      false = 从未保存过工作簿。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        相关资源
        最近更新 更多