Ciao ragazzi,

non riesco a spiegarmi uno strano comportamento della proprietà Range.End che che serve a individuare l'ultima cella di un range.

L'help di Excel riporta questo:


Range.End, proprietà
Restituisce un oggetto Range che rappresenta la cella alla fine dell'area contenente l'intervallo di origine. Equivale a premere FINE+freccia SU, FINE+freccia GIÙ, FINE+freccia SINISTRA o FINE+freccia DESTRA. Oggetto Range di sola lettura.
Sintassi

espressione.End(Direzione)

espressione Variabile che rappresenta un oggetto Range.

Parametri

Nome Obbligatorio/Facoltativo Tipo di dati Descrizione
Direzione Obbligatorio XlDirection Specifica la direzione dello spostamento.

Esempio


In questo esempio viene selezionata la prima cella della colonna B nell'area contenente la cella B4.

Range("B4").End(xlUp).Select

In questo esempio viene selezionata l'ultima cella della riga 4 nell'area contenente la cella B4.

Range("B4").End(xlToRight).Select

In questo esempio viene estesa la selezione dalla cella B4 all'ultima cella contenente dati nella quarta riga.

Worksheets("Sheet1").Activate
Range("B4", Range("B4").End(xlToRight)).Select
Associando questo codice ad un pulsante

codice:
MsgBox Range("A:A").End(xlDown).Row
si può notare che inserendo dei valori nelle prime 2 o più celle della colonna A e cliccando sul pulsante si ottiene, correttamente, il valore dell'ultima riga valorizzata mentre valorizzando solo la cella A1 o non valorizzandone nessuna, si ottiene sempre il valore 1048576 se si sta utilizzando Excel 2007 e 65536 se si utilizza Excel 2003.

Questo valore corrisponde al numero massimo di righe gestibili da Excel e potrei anche capire che in assenza di celle valorizzate excel possa restituirmelo. Non sarebbe elegante ma comunque accettabile. Quello che proprio non capisco è perché mi restituisce quel valore anche se c'è una cella valorizzata invece di restituirmi 1.

In questo modo non ho la possibilità di distinguere il caso di "nessuna cella valorizzata" dal caso di "una cella valorizzata".

Qualcuno mi sa spiegare questa cosa e se sto sbagliando qualcosa?

Grazie a tutti