代码之家  ›  专栏  ›  技术社区  ›  ChrisB

VBA能否确定是否保存过Excel工作簿?

  •  5
  • ChrisB  · 技术社区  · 6 年前

    如何判断Excel工作簿是否已使用VBA至少保存一次,而不是作为未保存的新工作簿。我不想检查当前是否保存了文档-只有单击“保存”时,才会将文档保存到现有位置或提示我选择保存位置。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Jalal    6 年前
    If ActiveWorkbook.Path = vbNullString Then
        'actions if the active workbook hasn't been saved yet go here
    Else
        '....
    End If
    
        2
  •  7
  •   user4039065    6 年前

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

    更清晰的检查可能与仅在保存的工作簿上工作的工作表函数一样简单。

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

    在VBA中,.address属性在与外部:=true参数一起使用时不会返回任何路径。

    ?range("A1").Address(external:=true)
    [Book1]Sheet5!$A$1
    
        3
  •  7
  •   ChrisB    6 年前

    我觉得这个很有用。 .BuiltinDocumentProperties("last save time") 返回A vbDate ( VarType =7)表示工作簿上次保存的时间,仅当文件至少保存一次时。否则它返回 vbObject ( 变量名 =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()
        Dim wb As Workbook
        Set wb = ActiveWorkbook
    
        If WasSavedAtLeastOnce(wb) = True Then
            MsgBox "This file has been saved at least once."
        Else
            MsgBox "This file has never been saved."
        End If
    End Sub
    
    推荐文章