Elenco fogli in una ComboBox



  • Elenco fogli in una ComboBox
    di cromagno data: 03/04/2015 19:53:01

    Salve,
    ho una cartella di lavoro con una ventina di fogli (che possono aumentare o diminuire a seconda delle necessità), nel primo foglio (si chiama Resoconto) vorrei mettere una ComboBox che si attivi all'apertura del file e che contenga la lista di tutti i fogli presenti nella cartella di lavoro (escluso il foglio "Resoconto" in cui si trova la ComboBox).
    Inoltre, se possibile, una volta selezionato un foglio dalla lista, vorrei che andare direttamente in quel foglio (attraverso un DoubleClick o premendo il tasto Invio o qualsiasi altro modo analogo).
    Se vi servono altri dati, chiedete pure. Non conosco ancora bene il regolamento di questo Forum.
    Grazie in anticipò a chi risponderà



  • di lepat (utente non iscritto) data: 03/04/2015 20:43:57

    si puo fare anche senza combo i questo modo
     
    Sub Sheetnames()
    Dim x As Worksheet
    y = 1
    For Each x In Worksheets
    Sheets("Resoconto").Cells(y, 1).Hyperlinks.Add Anchor:=Sheets("Index").Cells(y, 1), Address:="", SubAddress:=x.Name & "!A1"
    y = y + 1
    Next x
    End Sub



  • di cromagno data: 03/04/2015 20:52:45

    Grazie ma, mi da un errore "Indice non incluso nell'intervallo".
    Ad ogni modo, vorrei proprio utilizzare una ComboBox e soprattutto che il codice venga eseguito all'apertura del file.
    Quindi immagino che il codice debba iniziare tipo:
    Private Sub WorkBook_Open ()



  • di azzeccagarbugli (utente non iscritto) data: 03/04/2015 22:37:25

    Quello che riesco a proporti è questo (Codice in allegato).

    ComboBox si aggiorna quando viene selezionato
    Seleziona foglio quando esci da Combobox

    Personalmente preferirei utilizzare UserForm.

     
    Option Explicit
    
    Private Sub ComboBox2_GotFocus()
    Dim Fg As Long
        ComboBox2.Clear
        For Fg = 2 To Sheets.Count
            ComboBox2.AddItem Sheets(Fg).Name
        Next Fg
    End Sub
    Private Sub ComboBox2_LostFocus()
    On Error GoTo 10
        Sheets(ComboBox2.Value).Select
    10:
    End Sub
    



  • di lepat (utente non iscritto) data: 04/04/2015 07:53:14

    L' errore "Indice non incluso nell'intervallo" è dovuto al nome del foglio, devi sostituire Index con Resoconto

    Sheets("Resoconto").Cells(y, 1).Hyperlinks.Add Anchor:=Sheets("Index").Cells(y, 1), Address:="", SubAddress:=x.Name & "!A1"





  • di lepat (utente non iscritto) data: 04/04/2015 10:45:58

    soluzione con combo allegata


  • ...almost perfect...
    di cromagno data: 04/04/2015 14:10:38

    Il file in Allegato che ha messo lepat funziona bene, anche se quello che mi piacerebbe è in pratica il codice proposto da azzeccagarbugli.
    Azzeccagarbugli... solo una domanda:
    la lista dei fogli compare e apre direttamente il foglio con un doppio-click, ma alcune volte la lista si presenta come un classico elenco a discesa, con circa 8 elementi per volta e la relativa scrollbar (che è esattamente quello che voglio), altre volte invece l'elenco a discesa è composto da un solo elemento con una "casella di selezione" (tasto su/giù per la scelta) al posto della "barra di scorrimento".... Devo cambiare qualcosa nelle proprietà o mi puoi dire come mai succede solo saltuariamente?!?
    Nel mentre... grazie, a entrambi


  • piccola modifica...
    di cromagno data: 04/04/2015 15:56:59

    Modificando leggermente il codice di azzeccagarbugli (in allegato) mi compare la "casella di selezione" solo all'apertura del file e solo la prima volta che apro la lista dei fogli.
    Non capisco il perchè.... ma va benissimo anche così (anche se mi rode un pò ).
    Non metto ancora "risolto" in attesa che qualcuno possa darmi delle delucidazioni.
     
    Option Explicit
    Private Sub ComboBox2_GotFocus()
    Dim Fg As Long
    ComboBox2.Value = "Scegli Foglio..."
            For Fg = 2 To Sheets.Count
            ComboBox2.AddItem Sheets(Fg).Name
        Next Fg
    End Sub
    Private Sub ComboBox2_LostFocus()
    On Error GoTo 10
        Sheets(ComboBox2.Value).Select
    10:
    ComboBox2.Value = "Scegli Foglio..."
    End Sub
    



  • di azzeccagarbugli (utente non iscritto) data: 04/04/2015 17:10:20

    I due codici funzionano in modo un pò diverso.
    L'elenco dei fogli di lavoro si genere quando selezioni il ComboBox (GotFocus)
    Il foglio di lavoro viene selezionato non con doppio click (DblClick) ma quando selezioni una cella dopo aver effettuato al scela (LostFocus)
    Se vuoi selezionare il foglio con doppio click, puoi provare con i codici sotto riportati.

    Cit. mi compare la "casella di selezione" solo all'apertura del file e solo la prima volta che apro la lista dei fogli.

    Vuoi che l'elenco dei fogli in ComboBox sia disponibile già all'apertura del file?

     
    Option Explicit
    
    Private Sub ComboBox2_GotFocus()
    Dim Fg As Long
        ComboBox2.Clear
        For Fg = 2 To Sheets.Count
            ComboBox2.AddItem Sheets(Fg).Name
        Next Fg
    End Sub
    Private Sub ComboBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    On Error GoTo 10
        Sheets(ComboBox2.Value).Select
            End
    10:
    MsgBox "Scegli Foglio..."
    End Sub



  • di cromagno data: 04/04/2015 17:34:58

    Si, esattamente...
    vorrei che l'elenco sia disponibile già all'apertura.



  • di azzeccagarbugli (utente non iscritto) data: 04/04/2015 19:28:13

    In realtà, anche all'apertura, ComboBox2 contiene già l'elenco di tutti i fogli di lavoro; solo che per selezionarli presenta i tasti su/giù per la scelta.
    Questo accade solo per la prima selezione, poi l'elenco risulta completamente selezionabile tramite la "barra di scorrimento".

    Considera che, volendo, puoi digitare il NomeFoglio in ComboBox e già, dopo aver inserito il primo carattere, ti verrà proposto il foglio corrispondente.

    Possiamo trovare il modo di popolare ComboBox all'apertura, ma credo che ci complichiamo la vita inutilmente.


  • Thanks
    di cromagno data: 04/04/2015 19:35:12

    Concordo...
    Va bene così

    Grazie per l'aiuto