2012-06-28 19 views
12

¿Cuál es el operador o la función para probar si dos variables del mismo tipo de objeto personalizado se refieren al mismo objeto? He intentadoVBA: cómo probar la igualdad de objetos (si dos variables hacen referencia al mismo objeto)

If myObject = yourObject Then 

Pero obtenga un error de tiempo de ejecución El objeto 438 no admite esta propiedad o método. Supongo que eso me está diciendo que anule el operador '=' para probar si todos los campos de los dos objetos tienen el mismo valor. Pero lo que quiero es probar si son el mismo objeto.

Respuesta

26

Supongo que me está diciendo que anule el operador '=' para probar si todos los campos de los dos objetos tienen el mismo valor.

No, es que los objetos no tienen una propiedad predeterminada que habría sido llamada por otro nombre dice, y los resultados devueltos se comparan.

Usted igualdad de referencia de la prueba con Is

If myObject Is yourObject Then 
+0

Gracias GSerg, exactamente lo que necesitaba – Swiftslide

+0

@GSerg: Eso no parece trabajar para dos objetos de rango. Por ejemplo, Set r1 = Range ("A1") y Set r2 = Range ("A1"), luego Debug.Print r1 Is r2 devuelve False. –

+7

@ExcelDevelopers 'Is' prueba la igualdad referencial, no la igualdad según una lógica de nivel superior. Los dos objetos 'Range' son instancias diferentes, por lo tanto' Is' devuelve correctamente false. El hecho de que se refieran al mismo rango no es relevante - 'Is' no puede y no sabe acerca de esta conexión lógica adicional, solo específica de' Range's. Si desea verificar si dos 'Rangos' se refieren al mismo rango de hojas, necesita comparar sus 'Direcciones' o ver si 'Aplicación.Intersect (r1, r2)' da el rango del mismo tamaño que ambos 'r1' y' r2'. – GSerg

Cuestiones relacionadas