【问题标题】:VBA - SaveCopyAs hiddenVBA - SaveCopyAs隐藏
【发布时间】:2019-03-12 15:55:01
【问题描述】:

每次我保存我的工作簿时,我都需要保存同一个工作簿,但被隐藏了。

现在我有了这个代码

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    ThisWorkbook.Saved = True
    On Error Resume Next
    If Not (Left(ThisWorkbook.Name, 2) = "Z_") Then
        Application.DisplayAlerts = False
        ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\Z_" & ThisWorkbook.Name
        SetAttr ThisWorkbook.Path & "\Z_" & ThisWorkbook.Name, vbHidden
        Application.DisplayAlerts = True
    End If
    SetAttr ThisWorkbook.Path & "\Z_" & ThisWorkbook.Name, vbHidden
End Sub

但是,它只能每秒钟运行一次。第一次保存 WB 时,它会创建文件并将其隐藏,但是当我第二次保存时,它会删除隐藏文件。

当我使用具有覆盖属性的 SaveAs 时,它会保存文件并激活它,但我不希望这样。

这是为什么呢?请问这个怎么解决?

【问题讨论】:

    标签: excel vba save hidden


    【解决方案1】:

    当你遇到这样的问题时,首先要做的就是注释掉On Error Resume NextApplication.DisplayAlerts = False。这将为您提供有关正在发生的事情的更多信息。

    在您的情况下,您遇到了预先存在的文件的问题。试试这个:

    Private Sub Workbook_AfterSave(ByVal Success As Boolean)
        Dim HiddenFileName As String
    
        HiddenFileName = ThisWorkbook.Path & "\Z_" & ThisWorkbook.Name
    
        ThisWorkbook.Saved = True
    
        On Error Resume Next
        If Not (Left(ThisWorkbook.Name, 2) = "Z_") Then
    
            Application.DisplayAlerts = False
    
            ' Unhide and delete existing file
            SetAttr HiddenFileName, vbNormal
            Kill HiddenFileName
    
            ' Save new copy and hide it
            ThisWorkbook.SaveCopyAs HiddenFileName
            SetAttr HiddenFileName, vbHidden
            Application.DisplayAlerts = True
        End If
        SetAttr HiddenFileName, vbHidden
    End Sub
    

    在重新创建文件之前,它会取消隐藏并删除文件。这有点脏,因为它不测试它之前是否存在,而是依赖于On Error Resume Next

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多