Elenco fogli in una ComboBox
Hai un problema con Excel? 
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
Vuoi Approfondire?