Se stai lavorando in un foglio di Excel, sai che puoi premere Ctrl+Fine per passare all’ultima cella del foglio di lavoro. La scorciatoia sceglie la cella che rappresenta l’intersezione tra l’ultima colonna contenente dati e l’ultima riga contenente dati. Pertanto, se l’ultima colonna in cui sono presenti dati è la colonna F e l’ultima riga in cui sono presenti dati è la riga 27, Ctrl+Fine selezionerà la cella F27.
Per eseguire la stessa operazione con una macro, puoi utilizzare un comando molto semplice, come mostrato qui:
Sub TrovaUltimaCella1()
ActiveCell.SpecialCells(xlLastCell).Select
End Sub
Funzionalmente equivale a premere Ctrl+Fine. Tuttavia (e questo è un grosso problema), Excel non tiene traccia dinamicamente di quali righe e colonne siano le ultime utilizzate in un foglio di lavoro. Ad esempio, supponiamo che tu apra una cartella di lavoro, premi Ctrl+Fine e vieni indirizzato alla cella F27. Se poi elimini tre righe e una colonna, ti aspetteresti che Ctrl+Fine ti porti alla cella E24. Non è così: ti porterà comunque alla cella F27 finché non salvi la cartella di lavoro.
Questo stesso problema riguarda il codice macro mostrato nella macro TrovaUltimaCella1: ti porterà alla cella che risultava essere l’ultima utilizzata all’ultimo salvataggio, indipendentemente da quali colonne o righe hai eliminato durante la sessione corrente.
Ciò che serve è un modo per reimpostare l’indicatore “ultima cella”, proprio come se avessi salvato e riaperto la cartella di lavoro. Non esiste un comando macro intrinseco che lo faccia, ma esiste un modo per forzare Excel a eseguire il ripristino. Tutto quello che devi fare è aggiustare la macro come segue:
Sub TrovaUltimaCella2()
x = ActiveSheet.UsedRange.Rows.Count
ActiveCell.SpecialCells(xlLastCell).Select
End Sub
Questa macro ti porta sempre alla cella corretta: funziona come ti aspetteresti che Ctrl+Fine funzioni sempre. Funziona perché a quanto pare Excel, quando calcola la proprietà Count per il numero di righe nel foglio di lavoro, reimposta sempre l’indicatore “ultima cella”. Puoi anche fare affidamento sull’oggetto UsedRange in un modo diverso:
Sub TrovaUltimaCella3()
ActiveSheet.UsedRange.SpecialCells(xlLastCell).Select
End Sub
Il risultato, ancora una volta, è che viene selezionata l’ultima cella desiderata.
C’è da dire, comunque, che Il metodo Range.SpecialCells potrebbe non funzionare correttamente quando viene fatto riferimento ad esso direttamente o indirettamente in una funzione definita dall’utente (UDF). In alternativa può essere utilizzata una macro come la seguente:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)