¿Hay algún límite en el contenido de las celdas para usar el método FIND en Excel VBA?

Estoy tratando de utilizar el método FIND para encontrar duplicados entre dos libros de excel. El programa funciona, pero cuando se encuentra con algunas celdas se produce un error (Los tipos no coinciden) y no puedo validar que haya o no coincidencia.

¿Hay algún límite de tamaño en el contenido de la celda o algún caracter prohibido? ¿Cómo podría resolverlo?

El contenido de la celda es este:

Servizo de programación e xestión do programa "Voluntariado Ambiental nos Parques Naturais de Galicia", cofinanciado nun 80% polo Fondo Europeo de Desenvolvemento Rexional no marco do Programa Operativo FEDER Galicia 2014-2020. Expediente núm. 15/2017 PN ( educación ambiental )

1 Respuesta

Respuesta
1

Puedes poner el código para revisarlo. Dime exactamente qué dice el mensaje de error y en cuál línea de tu macro se detiene.

Hola Dante.

Ante todos muchas gracias por el interés. Este es el código.

Sub clientes_libro2_no_en_libro1()

On Error GoTo HayErrores

Set h1 = Workbooks(2).Sheets(1)
Set h2 = Workbooks(1).Sheets(1)
h2.Activate
Set r = h1.Range("C:C")
col = "C"
For i = 3 To h2.Range(col & Rows.Count).End(xlUp).Row
Set v = r.Find(Cells(i, col), LookIn:=xlValues)
If v Is Nothing Then
MsgBox (i & "-" & col & ". --> NO Encontrado: " & Cells(i, col).Value)
Else
MsgBox (i & "-" & col & ". --> Encontrado (BORRAR): " & Cells(i, col).Value)
'Cells(i, 1).EntireRow.Delete
End If
Next
Exit Sub
HayErrores:
MsgBox (i & "-" & col & ". --> ERROR (" & Err.Description & ") Encontrado: " & Cells(i, col).Value)
Resume Next
End Sub

El error se produce justamente en Set v = r.Find(Cells(i, col), LookIn:=xlValues)

¿Como lo ves?

Efectivamente el límite de caracteres para buscar es de 255, más sobre límites:

https://support.office.com/es-es/article/Especificaciones-y-l%C3%ADmites-de-Excel-1672b34d-7043-467e-8e27-269d656771c3 


Para evitar el error al momento de buscar, vamos a recortar el dato a 255 caracteres, buscaremos entonces todas las coincidencias de 255 caracteres, pero vamos a comparar el total de caracteres contra la coincidencia:

If h2.Cells(i, col).Value = b.Value Then

Si los datos son iguales, entonces se elimina la fila.


Nota: Para eliminar la fila, lo más práctico y adecuado, es empezar de la última fila hacia arriba, ya que si lo haces de arriba hacia abajo, se pierde el contador, por ejemplo, si vas en i = 5 y borras la fila 5, entonces la fila 6 se recorre a la fila 5, en el siguiente ciclo: i = 6, ya no verificas el contenido de la fila 6, porque la fila 6 pasó a ser la fila 5.


Te anexo le código completo:

Sub clientes_libro2_no_en_libro1_v2()
'Act.Por.Dante Amor
    Set h1 = Workbooks(2).Sheets(1)
    Set h2 = Workbooks(1).Sheets(1)
    h2.Activate
    Set r = h1.Range("C:C")
    col = "C"
    For i = h2.Range(col & Rows.Count).End(xlUp).Row To 3 Step -1
        existe = False
        dato = Left(h2.Cells(i, col).Value, 255)
        Set b = r.Find(dato, LookIn:=xlValues, LookAt:=xlPart)
        If Not b Is Nothing Then
            celda = b.Address
            Do
                'compara celdas completas
                If h2.Cells(i, col).Value = b.Value Then
                    MsgBox (i & "-" & col & ". --> Encontrado (BORRAR): " & h2.Cells(i, col).Value)
                    h2.Rows(i).Delete
                    existe = True
                    Exit Do
                End If
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> celda
        End If
        If existe = False Then
            MsgBox (i & "-" & col & ". --> NO Encontrado: " & h2.Cells(i, col).Value)
        End If
    Next
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

¡Muchas gracias!

Sabiendo que hay límite de caracteres lo comprendo todo. Gracias también por el código mejorado.

Esta duda ha quedado perfectamente resuelta. ¡A por la próxima!

La pregunta no admite más respuestas

Más respuestas relacionadas