Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

comparar 2 rangos con VBA

665 views
Skip to first unread message

MarianoH

unread,
Jun 23, 2004, 6:38:09 AM6/23/04
to
Quiero saber si el rango que recivo como Target en un
evento es uno en particular dentro de la hoja
If Range("Origen") = Target... da error y si
utilizo .Address u otras propiedades que estuve probando
me arroja un error cuando un Target tiene mas de una celda.
He utilizado Row y Col, pero seguramente debe haber alguna
manera más directa.
Gracias

Fernando Arroyo

unread,
Jun 23, 2004, 7:34:38 AM6/23/04
to
La instrucción

If Range("Origen").Address = Target.Address then ...

a mí no me da error aunque la selección sea de varias celdas...
Un saludo.


Fernando Arroyo
MS MVP - Excel

"MarianoH" <anon...@discussions.microsoft.com> escribió en el mensaje news:2087d01c4590e$2d1324a0$a001...@phx.gbl...

Manuel Romero

unread,
Jun 23, 2004, 10:51:33 AM6/23/04
to
Como vas a comparar objetos, deberias usar Is

If Range("Origen") Is Target ....

Si referencian al mismo objeto es true

"MarianoH" <anon...@discussions.microsoft.com> escribió en el mensaje
news:2087d01c4590e$2d1324a0$a001...@phx.gbl...

anon...@discussions.microsoft.com

unread,
Jun 23, 2004, 11:09:07 PM6/23/04
to
Bueno, la única forma en que lo he podido hacer funcionar
es esta:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("A2"), Target) Is Nothing Then
MsgBox ("Ha cambiado el rango A2")
End If
End Sub

--Si utilizo: <Range("a2") is Target> siempre me da falso.
--Y si uso <Range("A2").Address=Target.Address> tengo un
error cuando, por ejemplo, quiero deletear el rango A2:B8

Si no estoy contemplando algo, agradeceré la corrección.
Saludos

>-----Mensaje original-----


>Como vas a comparar objetos, deberias usar Is
>
>If Range("Origen") Is Target ....
>
>Si referencian al mismo objeto es true
>
>"MarianoH" <anon...@discussions.microsoft.com> escribió
en el mensaje

-----------------------------------------------------
>Quiero saber si el rango que recibo como Target en un
>evento es uno en particular dentro de la hoja.


>If Range("Origen") = Target... da error y si
>utilizo .Address u otras propiedades que estuve probando
>me arroja un error cuando un Target tiene mas de una
celda.
>He utilizado Row y Col, pero seguramente debe haber alguna
>manera más directa.
>Gracias

>Mariano
>
>.
>

Héctor Miguel

unread,
Jun 24, 2004, 12:54:23 AM6/24/04
to
hola, [¿Mariano?] !

> ... Si no estoy contemplando algo, agradecere la correccion [...]

la propuesta que te hace Fernando Arroyo es correcta ;)


> If Range("Origen").Address = Target.Address then ...

supone que 'Origen' es un rango 'con nombre' o...
una [variable de texto con la] direccion de celda/s
toma en cuenta las notas que te expongo al final ;)

saludos,
hector.
----------
para 'comprobrar' si el rango seleccionado es 'uno en particular'...
[puesto que la propiedad 'por omision' de un objeto 'Range' es... 'Value']
se debera 'atender' a su propiedad 'Address' [cadena de texto]
lo cual... 'implica' que la 'comparacion' [en vba] debe ser =>exacta<= [mayusculas, etc.]
[a menos que... al inicio del modulo se ponga la instruccion 'Option Compare Text']

suponiendo que la celda seleccionada fuese 'A1'...
[segun 'el tipo Address' de la instruccion empleada en el evento '_SelectionChange']...
a) Target.Address =>devolvera<= "$A$1"
b) Target.Address(False) =>devolvera<= "$A1"
c) Target.Address(, False) =>devolvera<= "A$1"
d) Target.Address(False, False) =>devolvera<= "A1"
e) Target.Address(, , xlR1C1) =>devolvera<= "R1C1"
f) Target.Address(, , , True) =>devolvera<= "[Libro1]Hoja1!$A$1"
g) [alguna 'combinacion' de las anteriores ???] ;)

la instruccion Target = "A1"... devolvera 'True'...
=> SOLO si la [unica] celda seleccionada =>'contiene' "A1"<=
la instruccion Target = Range("b1")... devolvera 'True'...
=> SOLO si el 'valor' de la [unica] celda seleccionada =>es igual al de 'B1'<=
AMBOS 'fallan' si el 'Target' es de mas de una celda :((

si necesitas 'asegurarte' que el rango seleccionado sea [p.e.] 'b2:f3'...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$2:$F$3" Then
MsgBox "Acertaste !!!"
Else
MsgBox "<\°|°/> Inténtalo de nuevo"
End If
End Sub

0 new messages