Condividi tramite

macro excel per visualizzare sheet nascoste

Anonimo
2018-12-01T10:15:37+00:00

Buongiorno,

Ho un file excel contenente varie sheet; alcune sono visibili, altre nascoste. Mi servirebbe del codice vba per visualizzare "quasi" tutte le sheet nascoste. Mi spiego meglio. Ho, ad esempio, 7 sheet nascoste (che in futuro potrebbero essere di più o di meno) e si chiamano così: Comuni_Italiani, Foglio1, Foglio2, Foglio3, Foglio4, Foglio5, Rubrica. A mezzo VBA (magari con una macro), vorrei poter visualizzare un elenco, in ordine alfabetico, delle sheet nascoste. Ma non di tutte: vanno escluse dall'elenco Comuni_Italiani e Rubrica. Tutte le altre, invece, dovrebbero essere elencate in ordine alfabetico crescente. A tal punto, servirebbe anche (dall'elenco in questione) poter rendere visibile una di quelle sheet, a scelta, tipo, ad esempio, cliccando sopra il nome o selezionandolo.

Qualcuno potrà dire: che bisogno hai di tutto ciò visto che excel permette di suo la visualizzazione dei fogli nascosti? Excel, però, non elenca le sheet nascoste in ordine alfabetico crescente. Se io oggi, ad esempio, creassi una sheet e la chiamassi Zio_Paperone, per poi nasconderla, e domani ne creassi un'altra chiamandola Amelia e anch'essa la nascondessi, Excel, come sheet nascoste, mi elencherebbe Zio_Paperone prima di Amelia. Provate a pensare cosa accadrebbe se le sheet nascoste, anziché 2, fossero tante. Inoltre, Excel me le elencherà tutte mentre io, come specificato sopra, vorrei che alcune non fossero elencate. Questo perché trattasi di sheet destinate né ad essere modificate, né ad essere mai visibili. Prendiamo, ad esempio, la sheet Comuni_Italiani; contiene un elenco completo di tutti i comuni d'Italia con le rispettive Regioni, Provincie e CAP. A meno che un giorno, in futuro, quell'elenco dovesse subire variazioni, io non avrò motivo neppure per rendere visibile quel foglio. Il contenuto di tale sheet, infatti, viene richiamato in quelle visibili attraverso formule collegate e/o menù a tendina. Analogo discorso per il contenuto della sheet Rubrica.

Spero tanto che qualcuno saprà aiutarmi.

Grazie in anticipo a chiunque di voi mi darà una mano.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
  1. Anonimo
    2018-12-02T09:47:52+00:00

    Ciao,

    vedi questa seconda versione: File esempio 2

    Quando un file di quelli in elenco viene reso visibile la listbox viene aggiornata eliminado la voce dall'elenco.

    Però, ovviamente, ciò comporta che il foglio non possa essere nascosto con il doppio click nella lista perché il nome non è più presente.

    Le modichie al codice sono riportate in grassetto:

    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) And Not sh.Visible Then

                .Add sh.Name

             End If

          Next sh

          .Sort

          ElencoFogliNascostiRelativi = .ToArray

       End With

       Set oSortedArrayList = Nothing

    End Function

    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

    ListBox1.List = ElencoFogliNascostiRelativi

    End Sub

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-12-03T09:07:38+00:00

    Grazie Casanmaner,

    Va benessimo così

    ;)

    0 commenti Nessun commento
  2. Anonimo
    2018-12-01T17:42:00+00:00

    Caro Casanmaner,

    Innanzitutto mi scuso per non aver replicato prima ma solo ora ho letto il tuo post;

    soprattutto ti ringrazio per la disponibilità dimostratami. Funziona tutto e potrebbe

    andar bene già così. Ho notato, però, questa cosa: i fogli che rendo visibili, attraverso la

    Userform, rimangono nella listbox anche dopo aver riavviato la user. Solo eliminandoli

    spariscono anche dalla listbox. Dopo aver reso visibile una sheet, esiste un modo affinché la

    listbox, al riavvio della Userform, si aggiorni?

    Ad ogni modo, ti ringrazio di cuore e ti auguro, nel caso non dovessimo leggerci a breve, una

    Buona e Santa Domenica

    0 commenti Nessun commento
  3. Anonimo
    2018-12-01T14:36:21+00:00

    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

    0 commenti Nessun commento