Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Nomi fogli in combobox

292 views
Skip to first unread message

emiliano

unread,
Sep 14, 2010, 7:21:36 AM9/14/10
to
Buongiorno a tutti, devo inserire in una combobox i nomi dei fogli.
Non voglio ricorrere ad una UserForm, come posso fare?

Grazie a tutti

Lucky

unread,
Sep 14, 2010, 8:08:09 AM9/14/10
to
On 14 Set, 13:21, emiliano <desiderio.mich...@gmail.com> wrote: [cut]
Salve emiliano,

' Estrazione dei nomi dei fogli: la macro che segue
' crea/aggiorna in un foglio ('Foglio4') l'elenco dei nomi
' dei fogli della cartella di lavoro, riordina i nomi,
' adatta la colonna, e ridefinisce il riferimento
' denominato 'EleFogli'
' Associare la combo-box al riferimento denominato
' - 'Intervallo di input:' "EleFogli"
' Ad ogni eventuale aggiornamento della lista dei nomi
' dei fogli, la combo-box sarà anch'essa aggiornata

Sub Test100914B()

ySht = "Foglio4" ' <<< ev. modificare
Sheets(ySht).Select
' se si modifica il rif. 'A1' modificare coerentemente
' tutti i riferimenti a 'Ax'
Range("A1").Select ' <<< ev. modificare
Selection.FormulaR1C1 = "Elenco Fogli"
Selection.Font.Bold = True
Selection.Font.Italic = True

For Each ySht In Sheets
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = ySht.Name
Next

Columns("A:A").Select
Selection.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1
Columns("A:A").EntireColumn.AutoFit

yRz = Range("A65536").End(xlUp).Row ' <<< ultima riga di col. 'A'

Range("A2:A" & yRz).Select
ActiveWorkbook.Names.Add _
Name:="EleFogli", _
RefersToR1C1:="=" & ySht & "!R2C1:R" & yRz & "C1"
Range("A1").Select

End Sub

Prova se va.
Saluti.
Lucky

Message has been deleted
Message has been deleted
Message has been deleted

emiliano

unread,
Sep 14, 2010, 9:26:00 AM9/14/10
to

Grazie mille per la risposta, mi rimangono un dubbio.

In che evento metto la funzione?

Grazie ancora

r

unread,
Sep 14, 2010, 10:33:29 AM9/14/10
to
> Grazie ancora- Nascondi testo citato
>
> - Mostra testo citato -

la combobox è un controllo activex? (ovvero nel modulo di classe del
foglio dove la collochi la visualizzi tra gli oggetti ... ne
visualizzi le routine di evento?)
saluti
r

Lucky

unread,
Sep 14, 2010, 11:09:24 AM9/14/10
to

La macro va inserita in un modulo VBA (menu Strumenti, Macro, Visual
Basic Editor o Alt+F11 da un foglio di Excel: si apre l'interfaccia di
programmazione... ). Sei nel Visual Basic Editor (VBE).
Menu Inserisci, Modulo
Menu Visualizza: Gestione progetti, Finestra proprietà.
Appaiono due finestre per la gestione dei progetti di VBA.
Nella "VBA Proiect - '...Nomefile'" appaiono due gerarchie di oggetti:
Microsoft Excel Oggetti e Moduli.
Espandere la cartella 'Moduli' (clic su (+)); 2 clic su 'Modulo1'; si
apre la finestra preposta a
contenere il codice VBA: incolla in questa finestra (Nomefile... -
Modulo1 (codice))
la macro pubblicata da 'Sub Test100914B() ... a ... End Sub (usa
l'ultima versione pubblicata,
contiene una modifica ad alcune variabili).
Il nome del foglio di riferimento 'Foglio1' deve essere un foglio
esistente nella cartella
e in cui la procedura possa andare ad estrarre l'elenco dei 'nomi-
foglio'.

'versione aggiornata al 2010.09.14-17.00'
Sub Test100914B()

yWks = "Foglio1" ' <<< ev. modificare
Sheets(yWks).Select


' se si modifica il rif. 'A1' modificare coerentemente
' tutti i riferimenti a 'Ax'
Range("A1").Select ' <<< ev. modificare
Selection.FormulaR1C1 = "Elenco Fogli"
Selection.Font.Bold = True
Selection.Font.Italic = True

For Each ySht In Sheets
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = ySht.Name
Next

Columns("A:A").Select
Selection.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1
Columns("A:A").EntireColumn.AutoFit

yRz = Range("A65536").End(xlUp).Row ' <<< ultima riga di col. 'A'

Range("A2:A" & yRz).Select
ActiveWorkbook.Names.Add _
Name:="EleFogli", _

RefersToR1C1:="=" & yWks & "!R2C1:R" & yRz & "C1"
Range("A1").Select

End Sub

Chiudi il VBE [X].
Salva il file per eccesso di zelo.
Dal foglio di Excel 'Foglio1' esegui la macro di estrazione dei nomi:
- Strumenti, Macro, Macro, ... Nome macro: 'Test100914B' (o quello con
cui lo avrai rinominato), Esegui
In 'Foglio1' appare l'elenco dei nomi.
Lo stesso elenco viene associato ad un riferimento denominato
'EleFogli' che puoi osservare da
menu Inserisci, Nome, Definisci, Definisci nome: =Foglio1!$A$2:$A$x

In un qualsiasi foglio, facciamo l'esempio in 'Foglio1', devi
visualizzare la barra strumenti 'Modulo'
(menu Visualizza, Barre strumenti, Moduli).
Seleziona fra gli oggetti disponibili sulla barra la combo-box
(casella combinata) e trascina su 'Foglio1'
per tracciare l'oggetto.
Pulsante dx sull'oggetto, voce 'Formato Controllo', scheda
'Controllo', box 'Intervallo di input:' scrivi "EleFogli";
box 'Collegamento cella: es.: $C$2; box altezza righe: es.: 8.
A questo punto ogni volta che selezionerai un foglio dalla combo-box
l'indice (bada bene rif. alla posizione
di quel 'nome-foglio' in quell' 'EleFogli') verrà restituito nella
cella C2.
Se vuoi, invece di un riferimento indice, il nome del foglio, in D2
inserisci la seguente formula: =INDICE(EleFogli; C2;1).
Questa formula recupera dall' 'EleFogli' il nome la cui posizione di
riga è indicata in C2, sulla prima colonna (1) essendo l'elenco
composto da una sola colonna. Trasporta questo nel foglio che ti
occorre ed adatta i riferimenti
Forse ho scritto più di quanto ti occorra. Spero sia compensibile.
Saluti lucky

r

unread,
Sep 14, 2010, 11:30:47 AM9/14/10
to
On 14 Set, 17:09, Lucky <luckyser...@gmail.com> wrote:

> Forse ho scritto più di quanto ti occorra. Spero sia compensibile.
> Saluti lucky

o forse no :-)

mi piacerebbe sapere qual'è il motivo dell'esigenza di emiliano ... e
sapere se la combo è un controllo moduli o un controllo activex ...

intanto ...
se trattasi di controllo moduli io non scriverei i nomi sul foglio ma
opterei per qualcosa tipo:

Sub Macro3()
Dim s As Shape
Dim sh As Worksheet
Set s = ActiveSheet.Shapes("A discesa 3")
s.ControlFormat.RemoveAllItems
For Each sh In ThisWorkbook.Worksheets
s.ControlFormat.AddItem sh.Name
Next
End Sub

ovviamente da adattare ai corretti riferimenti di foglio e combo ...
giusto per dare un'idea
potrebbe essere richiamata nell'evento activate del foglio dove è
collocata la combo ...
saluti
r

0 new messages