Io non ho capito.
--
Tiziano Marmiroli
Microsoft MVP - Office
... e se non hai capito tu! ... chissà cosa ho detto (ho offeso qualcuno?)
Comunque ci riprovo!
Ho un database (range "elenco" = B3:C100) con le intestazioni nella riga 3
(in B3 il testo "N." ed in C3 il testo "NOMINATIVO".
Da B4 a B100 i numeri da 1 a 97 (range "N.") e da C4 a C100 dei nomi in
ordine alfabetico.
Il seguente codice, associato ad un pulsante, provvede a riordinare il
database in ordine alfabetico ed a ripristinare l'esatta successione dei
numeri d'ordine:
Private Sub CmdOrdina_Click()
Application.Goto Reference:="Elenco"
Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
n = 1
For Each cell In Range("N.")
cell.Value = n
n = n + 1
Next
End Sub
Aggiornando il database, capita talvolta di dover inserire o cancellare dei
nominativi inserendo o eliminando righe all'interno del database.
Inserendo pochi nominativi per volta, non c'è nessun problema ma, allorchè
ho pensato di utilizzare questa applicazione per un altro database molto più
consistente, ho pensato di copiare le righe da 4 a 100 per incollarle più
volte in successione.
La sgradita sorpresa é stata quella di provare che il codice continuava a
funzionare perfettamente ma solo sui range "N." ed "Elenco" originali.
Da qui la curiosità di saper come fare per assegnare il nome "N."
direttamente dal codice.
Spero almeno di aver fatto un passo avanti nella formulazione delle domande
:)
Grazie
Enzo
> La sgradita sorpresa é stata quella di provare che il codice continuava a
> funzionare perfettamente ma solo sui range "N." ed "Elenco" originali.
> Da qui la curiosità di saper come fare per assegnare il nome "N."
> direttamente dal codice.
Cerca nella guida in linea "Proprietà CurrentRegion" e "Proprietà
Resize".
'A occhio' potrai usare qualcosa tipo:
ActiveWorkbook.Names.Add Name:="archivio", RefersTo:=Range("archivio").Resize(Range("archivio").CurrentRegion.Rows.Count)
ActiveWorkbook.Names.Add Name:="N.", RefersTo:=Range("Elenco").Cells(1).Offset(1, 0).Resize(Range("Elenco").Rows.Count - 1).Select
> ActiveWorkbook.Names.Add Name:="N.", >RefersTo:=Range("Elenco").Cells(1).Offset(1, >0).Resize(Range("Elenco").Rows.Count - 1).Select
C'e' un .Select di troppo:
ActiveWorkbook.Names.Add Name:="N.",RefersTo:=Range("Elenco").Offset(1, 0).Resize(Range("Elenco").Rows.Count - 1, 1)
Private Sub CmdOrdina_Click()
ActiveSheet.Names.Add Name:="N.", RefersTo:=Range("Elenco").Offset(1,
0).Resize(Range("Elenco").Rows.Count - 1, 1)
Application.Goto Reference:="Elenco"
Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
n = 1
For Each cell In Range("N.")
cell.Value = n
n = n + 1
Next
End Sub
Avevo intuito che occorresse far riferimento al range "elenco" per poi
spostarsi sulla selezione adiacente ma, inutile dirlo, non sono capace.
Sei impagabile come sempre.
Grazie
Enzo
"Tiziano Marmiroli" <t.mar...@mvps.org> ha scritto nel messaggio
news:gqhhmvca4f9qij0se...@4ax.com...