VBA - SaveCopyAs 隐藏
VBA - SaveCopyAs 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
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 时,它会创建文件并将其隐藏,但是当我第二次保存时,它会删除隐藏文件。
当我使用带覆盖的另存为 属性 时,它会保存文件并激活它,但我不希望这样。
这是为什么?请问如何解决?
当你遇到这样的问题时,首先要做的是注释掉On Error Resume Next
和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
它取消隐藏并删除文件,然后再次创建它。这有点脏,因为它没有测试它之前是否存在,而是依赖于 On Error Resume Next
.
每次保存我的工作簿时,我都需要保存同一个工作簿,但隐藏了。
现在我有了这个代码
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 时,它会创建文件并将其隐藏,但是当我第二次保存时,它会删除隐藏文件。
当我使用带覆盖的另存为 属性 时,它会保存文件并激活它,但我不希望这样。
这是为什么?请问如何解决?
当你遇到这样的问题时,首先要做的是注释掉On Error Resume Next
和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
它取消隐藏并删除文件,然后再次创建它。这有点脏,因为它没有测试它之前是否存在,而是依赖于 On Error Resume Next
.