Я думаю, этот код должен делать то, что вы хотите. Пожалуйста, попробуйте это. Он будет скрывать все листы, чье имя начинается с «Лист», за исключением того, что он сохранит один, если нет листа, который не соответствует требованиям.
Sub HideSheets()
Dim WbName As String
Dim Wb As Workbook
Dim Ws As Worksheet
Dim i As Integer
WbName = "Test.xlsx" ' specify the target
On Error Resume Next
Set Wb = Workbooks(WbName)
If Err.Number = 0 Then
On Error GoTo 0
With Wb
If InStr(1, .ActiveSheet.Name, "Sheet", vbTextCompare) = 1 Then
' ensure that the ActiveSheet will not be hidden
For i = 1 To (.Worksheets.Count - 1)
Set Ws = .Worksheets(i)
If InStr(1, Ws.Name, "Sheet", vbTextCompare) <> 1 Then Exit For
Next i
Ws.Activate
End If
For Each Ws In Wb.Worksheets
If Not Ws Is .ActiveSheet Then
If InStr(1, Ws.Name, "Sheet", vbTextCompare) = 1 Then
Ws.Visible = xlSheetHidden
' replace with xlSheetVeryHidden to exclude the sheet
' from the list of hidden worksheets accessible by the
' user. VerHidden worksheets can only be made visible
' from the VB Editor Project Explorer window or using code.
End If
End If
Next Ws
End With
Else
MsgBox "The workbook """ & WbName & """ must be open.", _
vbInformation, "Failure notice"
End If
End Sub