#excel #vba #save #hidden
#excel #vba #Сохранить #скрыто
Вопрос:
Каждый раз, когда я сохраняю свою книгу, мне нужно сохранять ту же книгу, но скрытую.
Теперь у меня есть этот код
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 amp; "Z_" amp; ThisWorkbook.Name
SetAttr ThisWorkbook.Path amp; "Z_" amp; ThisWorkbook.Name, vbHidden
Application.DisplayAlerts = True
End If
SetAttr ThisWorkbook.Path amp; "Z_" amp; ThisWorkbook.Name, vbHidden
End Sub
Однако это работает только каждый второй раз. При первом сохранении WB создается файл и он становится скрытым, но при повторном сохранении скрытый файл удаляется.
Когда я использую SaveAs со свойством перезаписи, он сохраняет файл и активирует его, но я этого не хочу.
Почему это? Как это решить, пожалуйста?
Ответ №1:
Когда у вас возникает подобная проблема, первое, что нужно сделать, это прокомментировать On Error Resume Next
и Application.DisplayAlerts = False
. Это даст вам гораздо больше информации о том, что происходит.
В вашем случае у вас была проблема с ранее существующими файлами. Попробуйте это вместо этого:
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim HiddenFileName As String
HiddenFileName = ThisWorkbook.Path amp; "Z_" amp; 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
.