Ciao prova a vedere se questo esempio fa quanto chiedi: File esempio
Nel fogli ci sono due fogli che ho nominato "Visibile01" e "Visibile02" che rappresenterebbero dei fogli che risultano essere normalmente visibili.
Poi ho inserito dei fogli nominati in diversi modi (es. Foglio01, Foglio02, ... FOGLIO04, FOGLIO05, ecc. ecc.).
Nel progetto VBA della cartella di lavoro ho inserito un Modulo1 dove è presente questo codice:
'<--- Modulo1
Option Explicit
Public Const sFogliEsclusi As String = "Visibile01,Visibile02," & _
"Foglio01,Foglio02,Foglio03"
Sub ElencoFogliNascostiShow()
UserForm1.Show
End Sub
Function ElencoFogliNascostiRelativi() As Variant
Dim arrFogliEsclusi As Variant
Dim iMatchFogliEsclusi As Variant
Dim sh
Dim oSortedArrayList As Object
arrFogliEsclusi = Split(sFogliEsclusi, ",")
Set oSortedArrayList = CreateObject("System.Collections.ArrayList")
With oSortedArrayList
For Each sh In ThisWorkbook.Sheets
iMatchFogliEsclusi = Application.Match(sh.Name, arrFogliEsclusi, 0)
If IsError(iMatchFogliEsclusi) Then
.Add sh.Name
End If
Next sh
.Sort
ElencoFogliNascostiRelativi = .ToArray
End With
Set oSortedArrayList = Nothing
End Function
'--->
Ho creato una UserForm nominata UserForm1 nel cui modulo è presente il seguente codice:
'<--- UserForm1
Option Explicit
Private Sub UserForm_Initialize()
With Me
.Caption = "Elenco Fogli Nascosti Relativi"
.ListBox1.List = ElencoFogliNascostiRelativi
End With
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If IsNull(ListBox1) Then Exit Sub
With ThisWorkbook
.Worksheets(ListBox1.Value).Visible = Not .Worksheets(ListBox1.Value).Visible
End With
End Sub
'--->
Quando la UserForm viene mostrata (è presente un pulsante in Visibile01) viene inserita una lista di tutti i fogli che sono esclusi ed elencati nella costante pubblica:
Public Const sFogliEsclusi As String = "Visibile01,Visibile02," & _
"Foglio01,Foglio02,Foglio03"
L'elenco dei fogli va inserito separando i nomi con la virgola senza che ci siano spazi tra un separatore e l'altro (ovviamente se un foglio avesse un nome con al proprio interno uno spazio questo andrebbe inserito.
Es. un foglio che si chiamasse "Mio Foglio Nascosto" in quell'elenco andrebbe aggiunto in tal modo:
Public Const sFogliEsclusi As String = "Visibile01,Visibile02," & _
"Foglio01,Foglio02,Foglio03,Mio Foglio Nascosto"
I fogli escludi da quell'elenco verranno tutti caricanti nella lista (listbox1) e in maniera ordinata (ordinamento testuale sensibile alle maiuscole e minuscole).
Dalla lista presente nella userform, selezionando uno dei nomi e facendo
doppio click, il foglio selezionato viene reso visibile o viene nascosto a seconda della condizione in cui si trova.
Quindi se è nascosto viene reso visibile e se è visibile viene nascosto.
Prova a vedere se ti può essere utile.
ciao