Grazie a tutti
' 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
Grazie mille per la risposta, mi rimangono un dubbio.
In che evento metto la funzione?
Grazie ancora
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
'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
> 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