Descripción
Este error de coincidencia ocurre cuando el Match
se utiliza la función, pero no se encontró ninguna coincidencia.
Él Match
La función se utiliza para determinar la posición en una lista unidimensional a la que corresponde un texto o un número.
Este error es del tipo ‘Tiempo de ejecución 1004’. Un error de tiempo de ejecución es el tipo de error que se produce durante la ejecución del código. VBA no lo sabe hasta que el código se ejecuta realmente. Detiene la ejecución del código.
El error específico ‘1004’ está relacionado con un error definido por la aplicación o definido por el objeto.
En otras palabras, esta variante particular de Runtime Error ocurre cuando VBA no puede identificar un objeto. La función Match debe devolver un objeto de coincidencia. Cuando no se encuentra ninguna coincidencia, VBA detecta que hay un objeto de coincidencia no identificado y, por lo tanto, genera este error de tiempo de ejecución 1004 en particular.
Consulte también https://software-solutions-online.com/run-time-error-1004-in-vba/ para ver otros ejemplos de errores de tiempo de ejecución.
Ejemplo 1: use Application.Match en su lugar
Un problema notable con el uso WorksheetFunction.Match es que arroja un error cuando no se encuentra la coincidencia, lo que complica un poco las cosas (veremos cómo manejar eso en el siguiente ejemplo). Pero por qué no usarlo Aplicación.Coincidencia ¿en cambio?
Es exactamente lo mismo, pero sin la parte de error de lanzamiento. Esto significa que funcionará exactamente así. WorksheetFunction.Match cuando se encuentra una coincidencia, pero cuando no se encuentra ninguna coincidencia, no se genera ningún error.
Además, Application.Match reconocerá que hay un error y puede señalarlo si lo solicita. Otra forma de ver esto es pensando WorksheetFunction.Match como una función que intenta crear un objeto de coincidencia y si no encuentra una coincidencia, no sabe qué hacer.
Pero Aplicación.Coincidencia es una función que intenta crear un objeto de coincidencia y, si no encuentra una coincidencia, crea una en su lugar Objeto de error (por lo tanto no se genera ningún error).
El lanzamiento de errores es disruptivo; detiene la progresión del código y termina sin objetos válidos con los que trabajar. Pero cuando eres un Objeto de error, entonces tiene un objeto válido con el que trabajar. En este ejemplo, estamos tratando de hacer coincidir un valor en la columna 1 que no existe. Inicialmente mantendremos la columna 1 vacía.
Sub No_Match() matchRow = Application.WorksheetFunction.Match("test", Columns(1), 0) End Sub

Para evitar el error, reemplazaremos WorksheetFunction.Match con Application.Match:
Sub No_Match() matchRow = Application.Match("test", Columns(1), 0) End Sub
El código funciona sin ningún problema. Esto debería ser suficiente para garantizar que nunca obtenga el temido error que detiene toda su aplicación. En el siguiente ejemplo, veremos cómo podemos manejar el error de una manera más significativa que se ajuste a nuestro propósito.
Ejemplo 2: Manejo del error
En este ejemplo, tratamos el error de tal manera que el flujo de nuestro código cambia en función de si obtuvimos un error durante la coincidencia o no.
Esto suele ser muy necesario cuando se codifican aplicaciones en el mundo real, porque si no encontramos lo que estamos buscando, tenemos que solucionar esos problemas.
Por lo general, tratamos de hacer coincidir una palabra para determinar en qué fila/columna se encuentra y así hacer algo con esa fila/columna.
Sub mismatchErrorHandling() matchRow = Application.Match("test", Columns(1), 0) If IsError(matchRow) Then MsgBox "No Match" Else MsgBox "Match row is: " & matchRow End If End Sub
Tenga en cuenta que debido a que estamos usando Application.Match, ahora podemos verificar si el objeto matchRow es un objeto de error. Si es así, entonces la declaración IsError(matchRow)
se evaluará como verdadero y un cuadro de mensaje mostrará «Sin coincidencia».




Descripción general
Usando Application.Match
en lugar de WorksheetFunction.Match
asegura que el objeto al que se asigna el resultado de la coincidencia está definido, incluso si no se encuentra la coincidencia.
Si se encuentra la coincidencia, se asigna el valor total de la coincidencia. Pero si no se encuentra, al objeto se le asignará un valor de error y se convertirá en un objeto de error que contiene las descripciones de error estándar, como el nombre del error, la descripción, el número, etc. Será fácil determinar si es un objeto de error o no. comprobando el uso de IsError(checkObj)
.