ERROR: Application-defined or object-defined error

Tengo una tabla origen, con más de 4000 entradas, y 3 columnas.
Tengo que buscar las coincidencias, con el campo de la primera columna, que hay entre la tabla origen y una segunda tabla con 3000 entradas, con 3 columnas, pero sólo la primera tiene contenido.
Si encuentra una coincidencia en alguna celda de la primera columna, tiene que rellarme la segunda y tercer columna de la segunda tabla, en la fila correspondiente a la del campo de la primera celda coincidente.
Para que nos entendamos es un listado de 4000 mil NIF's viejos, y las 2 columnas son contraseñas.
Ahora sólo hay 3000 NIF's, los tengo listados, pero quiero rellenarlo con su correspondientes contraseñas.
Código:
Sub Prueba()
Const TOTAL = 4330
Dim tablaOR, tablaDE, nif, pass1, pass2 As String
Dim i As Integer
'Ini variables
tablaOR = "hoja1"
tablaDE = "hoja2"
nif = "A"
pass1 = "B"
pass2 = "C"
'empieza for
For i = 1 To TOTAL
If ThisWorkbook.Worksheets(tablaOR).Application.Cells(i).Columns(nif).Value = ThisWorkbook.Worksheets(tablaDE).Application.Cells(i).Columns(nif).Value Then
ThisWorkbook.Worksheets(tablaDE).Application.Cells(i).Columns(nif).Activate
ThisWorkbook.Worksheets(tablaDE).Application.Cells(i).Columns(pass1).Value = ThisWorkbook.Worksheets(tablaOR).Application.Cells(i).Columns(pass1).Value
ThisWorkbook.Worksheets(tablaDE).Application.Cells(i).Columns(pass2).Value = ThisWorkbook.Worksheets(tablaOR).Application.Cells(i).Columns(pass2).Value
End If
Next i
End Sub
Muchas gracias ante todo : )

1 respuesta

Respuesta
1
Supongamos que tienes los 4000 NIFs antiguos en la página "hoja1" en las columnas A, B y C, y que los 3000 nuevos están en la página "hoja2" columna A.
Lo que yo haría es poner en las columnas B y C una fórmula para buscar el valor correspondiente en la "hoja1". Sería algo así:
1) En la celda B2 (supongo que la fila 1 son cabeceras) de la hoja2 pondría:
    =SI(ESERROR(BUSCARV($A2;Hoja1!$A:$C;2;FALSO));"** No está ***";BUSCARV($A2;Hoja1!$A:$C;2;FALSO))
2) en la celda C2 la fórmula sería:
    =SI(ESERROR(BUSCARV($A2;Hoja1!$A:$C;3;FALSO));"** No está ***";BUSCARV($A2;Hoja1!$A:$C;3;FALSO))
Después, con copiar la fórmula para los 3000 NIFs tendría lo que, si no me equivoco, estás buscando.
Hola.
Muchísimas gracias ante todo. Parece una solución genial la que me propones.
Me da error #NAME?
No entiendo por qué por que todas las columnas tienen ese nombre y... vamos, no veo nada raro, pero tampoco soy un entendido ;)
¿Qué puede ser?
Gracias!
¿Cómo se llaman las páginas donde están los datos y en qué columnas están?
Cópiame una de las fórmulas que has escrito y dime en qué celda la has puesto.
Esto de encontrar errores en otro sitio no suele ser sencillo, pero intentaré reproducirlo para ver qué pasa.
En la hoja 1 no pongo nada por que los datos sólo me sirve como referencia.
En la hoja 2, sólo tengo datos en la columna A, todos los NIF's de los que necesito obtener la columna B y C de los NIF's que encuentre en la hoja 1.
Entonces en B1 y sucesivos de la hoja 2 he puesto:
=SI(ESERROR(BUSCARV($A2;Hoja1!$A:$C;2;FALSO));"** No está ***";BUSCARV($A2;Hoja1!$A:$C;2;FALSO))
Y en C1 y sucesivas he puesto:
=SI(ESERROR(BUSCARV($A2;Hoja1!$A:$C;3;FALSO));"** No está ***";BUSCARV($A2;Hoja1!$A:$C;3;FALSO))
El error #Name se produce cuando no reconoce un nombre de la fórmula.
¿Tienes el Excel en Español o en Inglés?
Si no lo tienes en inglés la fórmula variaría. No puedo asegurártelo pero creo que sería algo así para la celda B2:
=IF(ISERROR(VLOOKUP($A2,Hoja1!$A:$C,2,FALSO)),"** No está ***",VLOOKUP($A2,Hoja1!$A:$C,2,FALSO))
Y para la celda C2, lo mismo cambiando el ", 2," por ", 3," (en los dos sitios que aparece.
Por cierto, la página es "hoja 1" o es "hoja1". No es lo mismo si lleva un blanco entre medias.
Es un Mac y está en inglés. Gracias, voy a probarlo!
Vale! Ahora la fórmula no contiene errores, pero me dice en TODOS: "No está", y sí, casi un 80% están!
¿Qué será?
Gracias figura.
Vale, me pone "No está" y específica: Fórmula Refers to Empty Cells.
Si quieres mándame una copia de la hoja de cálculo con 20 filas a mi correo y te lo miro.
La dirección es: [email protected]
Si no se ven los errores, es bastante difícil encontrarlos.
Enviado.
Muchísimas gracias Santiago, de verdad.
Dos cosillas:
La fórmula que te mandé era para las celdas B2 y C2, y la has puesto en B1 y C1. La diferencia es que tiene que poner $A1 en lugar del $A2 que aparece.
También te puse al final el parámetro "Falso" que es en español. Fallo mio. Debería ser False.
Las fórmulas quedarían así para las celdas B1 y C1:
=IF(ISERROR(VLOOKUP($A1,Hoja1!$A:$C,2,FALSE)),"** No está ***",VLOOKUP($A1,Hoja1!$A:$C,2,FALSE))
=IF(ISERROR(VLOOKUP($A1,Hoja1!$A:$C,3,FALSE)),"** No está ***",VLOOKUP($A1,Hoja1!$A:$C,3,FALSE))

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas