comparar 2 rangos con VBA

23/06/2004 - 12:38 por MarianoH | Informe spam
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

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
23/06/2004 - 13:34 | Informe spam
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" escribió en el mensaje news:2087d01c4590e$2d1324a0$
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
Respuesta Responder a este mensaje
#2 Manuel Romero
23/06/2004 - 16:51 | Informe spam
Como vas a comparar objetos, deberias usar Is

If Range("Origen") Is Target

Si referencian al mismo objeto es true

"MarianoH" escribió en el mensaje
news:2087d01c4590e$2d1324a0$
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
Respuesta Responder a este mensaje
#3 Anonimo
24/06/2004 - 05:09 | Informe spam
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

error cuando, por ejemplo, quiero deletear el rango A2:B8

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

Como vas a comparar objetos, deberias usar Is

If Range("Origen") Is Target

Si referencian al mismo objeto es true

"MarianoH" 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

.

Respuesta Responder a este mensaje
#4 Héctor Miguel
24/06/2004 - 06:54 | Informe spam
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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida