Discussione:
differenza tra activecell e range
(troppo vecchio per rispondere)
2emme
2010-02-03 10:31:49 UTC
Permalink
buongiorno a tutti,
premetto che non conosco per nulla vb
mi sono state passate due macro le cui istruzioni dovrebbero far si che ci
si porti alla fine di una tabella e venga selezionata la cella sottostante.
Con le istruzioni
ActiveCell.SpecialCells(xlLastCell).Select

ActiveCell.Offset(1, 0).Range("A1").Select

funziona tutto regolarmente

Con la seguente invece mi seleziona sempre la cella B3.

ActiveCell.SpecialCells(xlLastCell).Select

Range("B3").Select

Vi chiedo: quali sono le operazioni da tastiera che determinano tale
differenza?

Ho provato a riprodure le macro ma sia che mi sposti con il mouse che con le
frecce ottengo sempre la seconda soluzione e mai la prima.

grazie mille

m
plinius
2010-02-03 11:49:27 UTC
Permalink
Post by 2emme
buongiorno a tutti,
premetto che non conosco per nulla vb
mi sono state passate due macro le cui istruzioni dovrebbero far si che
ci si porti alla fine di una tabella e venga selezionata la cella
sottostante.
Con le istruzioni
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(1, 0).Range("A1").Select
funziona tutto regolarmente
Con la seguente invece mi seleziona sempre la cella B3.
ActiveCell.SpecialCells(xlLastCell).Select
Range("B3").Select
Vi chiedo: quali sono le operazioni da tastiera che determinano tale
differenza?
Ho provato a riprodure le macro ma sia che mi sposti con il mouse che con
le frecce ottengo sempre la seconda soluzione e mai la prima.
grazie mille
m
L'istruzione "ActiveCell.SpecialCells(xlLastCell).Select" seleziona la cella
corrispondente all'ultima riga utilizzata e all'ultima colonna utilizzata,
che non necessariamente corrispondono alla fine della tabella in cui ti
trovi al momento in cui lanci il comando.
Supponiamo che tu abbia una tabella di dati A1:C20.
Sei posizionato in una qualunque delle celle della tabella, per esempio B3 e
lanci quel comando: vedrai selezionata la cella C20
Ma se, in presenza della medesima tabella e sul medesimo foglio, nella cella
H70 c'è scritto "Ciao", lo stesso comando ti posizionerà in H70 e non in C20
Se vuoi andare alla fine della tabella, ignorando il "Ciao" (e sempreché non
vi siano interruzioni nella tabella) devi usare il metodo end:
"ActiveCell.end(xlDown).select"
e resterà selezionata la cella corrispondente all'ultima riga della colonna
di partenza

La seconda istruzione "ActiveCell.Offset(1, 0).Range("A1").Select" (che può
essere scritta più semplicemente "ActiveCell.Offset(1).Select" si sposta di
una riga più in basso, cioè nella prima libera.

Le due istruzioni possono anche essere simultanee:
ActiveCell.end(xlDown).Offset(1).Select

Invece "Range("B3").Select" dice esplicitamente di selezionare B3, quindi...

Se usi un po' F1 dall'editor di VBA, trovi (quasi) tutto quello che ti serve
per capire.

Ciao,
E.

Loading...