【发布时间】:2019-01-02 22:43:24
【问题描述】:
如何使用 VBA 判断 Excel 工作簿是否已保存?
我想知道单击保存是否会将文档保存到现有位置或提示我选择保存位置。
【问题讨论】:
如何使用 VBA 判断 Excel 工作簿是否已保存?
我想知道单击保存是否会将文档保存到现有位置或提示我选择保存位置。
【问题讨论】:
If ActiveWorkbook.Path = vbNullString Then
'actions if the active workbook hasn't been saved yet go here
Else
'....
End If
【讨论】:
ThisWorkbook.Path(或者甚至在工作簿集合中循环搜索匹配的名称,如“Book1”等)。
名称(例如 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
【讨论】:
我发现这很有帮助。 .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
【讨论】:
还有另一种方法 - 如果您可以编程访问 VBA 项目(信任中心设置)。
(从调试窗口)
对于 thisworkbook.VBProject.VBComponents 中的每个 n:?n.name、n.type、n.saved:下一个
查看 ThisWorkbook 的 .saved 属性值。
false = 从未保存过工作簿。
【讨论】: