VBA - SaveCopyAs隐藏

问题描述 投票:0回答:1

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

现在我有了这段代码

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个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.