Excel VBA-SaveCopyAs隐藏

Excel VBA-SaveCopyAs隐藏,excel,vba,save,hidden,Excel,Vba,Save,Hidden,每次保存工作簿时,我都需要保存相同的工作簿,但它是隐藏的 现在我有了这个代码 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

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

现在我有了这个代码

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与overwrite属性一起使用时,它会保存文件并将其激活,但我不希望这样


为什么呢?如何解决这个问题?

当您遇到这样的问题时,首先要做的是在“错误恢复下一步”中注释掉
Application.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
它会在再次创建文件之前取消隐藏并删除该文件。这有点脏,因为它不测试它以前是否存在,而是依赖于错误恢复下一步的