Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Ridefinire nome di un intervallo con VBA

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Ridefinire nome di un intervallo con VBA

Postdi fabio83 » 24/06/06 23:05

Ciao a tutti,
dato che uso una convalida (dal menu Dati-->Convalida-->Consenti: Elenco) ad elenco e questo elenco è riferito ad un intervallo definito "dbat0" (dal menu Inserisci-->Nome-->Definisci) e siccome questo elenco varia di dimensioni (cioè aumentano le righe) come posso fare una macro che ridefinisca l'intervallo "dbat0" in automatico? Praticamente mi dovrebbe definire l'intervallo a misura di quanto è grande. L'intervallo in questione aumenta solo in termini di righe, essendo un database dove ogni colonna è un carattere dell'elemento.
Grazie.

Fabio

*** metti titoli esatti , guarda gli altri come sono fatti,è difficile? è la 2° volta in poche ore che devo cambiarlo
fabio83
Utente Junior
 
Post: 15
Iscritto il: 17/06/06 20:52

Sponsor
 

Postdi Alexsandra » 24/06/06 23:32

Codice: Seleziona tutto
Private Sub Worksheet_Deactivate()
 Dim mioadd As String
 mioadd = Sheets("Clienti").Range(Sheets("Clienti").Cells(2, 1), Sheets("Clienti").Cells(65536, 1).End(xlUp)).Address
 ActiveWorkbook.Names.Add Name:="Cliente", RefersTo:="=Clienti!" & mioadd
 Sheets("Clienti").Range("A1").Sort Key1:=Sheets("Clienti").Range("A1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 24/06/06 23:37

Mi pare di aver capito che usi una intera colonna per il tuo elenco di convalida; allora se definisci la lista di convalida del tipo =$A:$A (se il tuo elenco e' in colonna A) non dovresti ridefinire in continuazione la dimensione dell' elenco.

Se ho capito male, o per ogni evenienza, per definire/ridefinire un range io uso
Codice: Seleziona tutto
Range(coord).Name = "ELENCO"

La variabile coord dovra' aver calcolato le coordinate del range; se hai il problema di calcolare l' ultima riga usata in una colonna, io uso qualcosa come
Codice: Seleziona tutto
LAST = Range("A65536").End(xlUp).Row

Fatti sentire, ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

[Excel] Ridefinire nome di un intervallo con VBA

Postdi fabio83 » 25/06/06 10:58

Ciao a tutti,
scusate la distrazione, veramente. Sarò più attento a scrivere il titolo.

Grazie sia ad Alexsandra che ad Anthony47, ora proverò e vi farò sapere.

In realtà il problema è che la Convalida, nonostante l'opzione "salta celle vuote" mi continua ad elencare tutte le celle vuote che stanno sotto quelle piene. La convalida ad elenco è associata ad un intervallo (poniamo dbat0 dove questo indica DATABASE!B2:B1001) solo che di questo intervallo io uso, per ora, solo 722 righe, essendo questi gli atleti già inseriti e avendo previsto un massimo di 1000 atleti (tutto perchè prima il mio file non era così dinamico come lo stò rendendo ora). Ora vorrei che la Convalida, che sta nel foglio CASSA1, mi restituisse solamente i campi occupati senza farmi vedere una sfilza di vuoti(openoffice non lo fa e in più si posiziona sul primo). Il bello è che quando vado a cliccare sulla freccetta di destra (del campo dove vi è la convalida ad elenco) mi posiziona proprio all'inizio dei vuoti). Per risolvere il tutto avevo pensato che ogni volta viene aggiunto un atleta, alla fine della macro che inserisce il nuovo atleta nel database vi fosse il codice per ridefinire, appunto, l'intervallo al quale fa riferimento la convalida elenco (dbat0 appunto).

Ad ogni modo le vostre risposte sono per me preziosissime (anche per altre necessità) e spero anche per gli altri lettori.

A presto,

Fabio
fabio83
Utente Junior
 
Post: 15
Iscritto il: 17/06/06 20:52

Postdi Alexsandra » 25/06/06 12:33

Il codice che ti ho postato sopra risolve il tuo problema,e inoltre ti ordina sempre i dati.
la macro viene lanciata ogni volta che deattivi il foglio interessato,ritengo utile anche l'ordinamento di tutti i dati (puoi avere un ordine alfabetico di tutti gli atleti) che ti può facilitare la ricerca.
Puoi anche creare più intervalli con lo stesso metodo
Codice: Seleziona tutto
Private Sub Worksheet_Deactivate()
 Dim mioadd As String
 mioadd = Sheets("Articoli").Range(Sheets("Articoli").Cells(2, 1), Sheets("Articoli").Cells(65536, 1).End(xlUp)).Address
 ActiveWorkbook.Names.Add Name:="Codice", RefersTo:="=Articoli!" & mioadd
 mioadd = Sheets("Articoli").Range(Sheets("Articoli").Cells(2, 2), Sheets("Articoli").Cells(65536, 2).End(xlUp)).Address
 ActiveWorkbook.Names.Add Name:="Descrizione", RefersTo:="=Articoli!" & mioadd
 Sheets("Articoli").Range("A1").Sort Key1:=Sheets("Articoli").Range("A1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
per esempio con questo codice crei l'intervallo "Codice" e Descrizione" nel foglio Articoli è molto pratico associarlo a dei combo citando solo l'intervallo per cui ampia possibilità di manovra con eventuali evoluzioni del programma che stai facendo
Per risolvere il tutto avevo pensato che ogni volta viene aggiunto un atleta, alla fine della macro che inserisce il nuovo atleta nel database vi fosse il codice per ridefinire, appunto, l'intervallo al quale fa riferimento la convalida elenco (dbat0 appunto).
basta che cambi la chiamata cioè
Private Sub Worksheet_Deactivate()
con "Macro 1" e alla fine della macro che ti modifica/inserisce i dati di un atleta la richiami

ciao
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Ridefinire nome di un intervallo con VBA":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti