Tengo duda con un error de una macro en excel

Soy nueva creando macros y me baso en tutoriales dependiendo de lo que necesito...

Acabo de hacer una macro que me filtra en base a una "palabra de búsqueda" cierta información de una base de datos muy amplia... Pero me marca :

Se ha producido el error 13 en tiempo de ejecución:

El tipo no coincide.

Ya la cheque vs el tutorial... La hice de nuevo.. Y me marca el mismo error...

Es esta:

Sub transferirdatosotrahoja()

    Dim nombre As String

    Dim telefono As Variant

    Dim correo As String

    Dim empleados As Variant

    Dim giro As String

    Dim ultimafila As Long

    Dim ultimafilaauxiliar As Long

    Dim cont As Long

    Dim palabrabusqueda As Variant

    palabrabusqueda = Sheets("COMPLETA").Cells(3, 3)

    palabrabusqueda = "*" & palabrabusqueda & "*"

        ultimafila = Sheets("COMPLETA").Range("A" & Rows.Count).End(xlUp).Row

    If ultimafila < 7 Then

        Exit Sub

    End If

    For cont = 7 To ultimafila

        If Sheets("COMPLETA").Cells(cont, 9) Like palabrabusqueda Then      (aqui me marca el error) 

            nombre = Sheets("COMPLETA").Cells(cont, 1)

            telefono = Sheets("COMPLETA").Cells(cont, 7)

            correo = Sheets("COMPLETA").Cells(cont, 8)

            empleados = Sheets("COMPLETA").Cells(cont, 10)

            giro = Sheets("COMPLETA").Cells(cont, 9)

            ultimafilaauxiliar = Sheets("RESUMEN").Range("A" & Rows.Count).End(xlUp).Row

            Sheets("RESUMEN").Cells(ultimafilaauxiliar + 1, 1) = nombre

            Sheets("RESUMEN").Cells(ultimafilaauxiliar + 1, 2) = telefono

            Sheets("RESUMEN").Cells(ultimafilaauxiliar + 1, 3) = correo

            Sheets("RESUMEN").Cells(ultimafilaauxiliar + 1, 4) = empleados

            Sheets("RESUMEN").Cells(ultimafilaauxiliar + 1, 5) = giro

        End If

    Next cont

End Sub

¿Qué estoy haciendo mal?

Plsssss ! Helpppp ! Se los agradezco en el alma :)

Caro Ochoa

1 respuesta

Respuesta
1

Probé tu macro y a mi me funciona bien, este error aparece cuando declaras una variable de una manera por ejemplo single y la celda donde la usas es un texto (string) entonces como las variables no coincide te envía este error, cambia la variable busquedapalabra por string y de preferencia sube una pantalla de tu información para ver que puede ser, como dije a mi me funciona bien aun cuando invente los datos.

Gracias por tu rápida respuesta !

¿Sabes? La probé en una base de datos diferente y si finciono correctamente, no se si tenga que ver que la original tiene más de 31,000 registros, porque me doy cuenta que solo me arroja resultado de una parte y no recorre los 31,000... osea.. solo me da como 300 registros de la "palabrabusqueda" y notablemente hay mucho más !

¿En qué la estoy regando? :O

Hice una prueba sobre 30000 registros y la macro que tienes funciona bien es super lenta para 30000 registros pero funciona, te propongo esta macro es prácticamente instantánea, primero hace un conteo de todos los datos que coinciden con la celda c3, luego hace las comparaciones directamente en la memoria sin interactuar con la hoja, las que cumplen las agrega a un contenedor de memoria llamado matriz, cuando todas las comparaciones están hechas en 1 solo paso coloca los resultados en la hoja2

Option Base 1
Sub rellena()
Set h1 = Worksheets("completa")
Set h2 = Worksheets("resumen")
ultimafila = h1.Range("A" & Rows.Count).End(xlUp).Row
palabrabusqueda = h1.Range("c3")
Set completa = h1.Range("a7").Resize(ultimafila, 10)
With completa
    r = .Rows.Count
    giro = .Columns(9)
    cuenta = WorksheetFunction.CountIf(.Columns(9), "*" & palabrabusqueda & "*")
    ReDim matriz(cuenta, 5)
    x = 1
    For i = 1 To r
        valida = giro(i, 1) Like "*" & palabrabusqueda & "*"
        If valida Then
            matriz(x, 1) = .Cells(i, 1)
            matriz(x, 2) = .Cells(i, 7)
            matriz(x, 3) = .Cells(i, 8)
            matriz(x, 4) = .Cells(i, 9)
            matriz(x, 5) = .Cells(i, 10)
            x = x + 1
        End If
    Next i
h2.Range("a2").CurrentRegion.Clear
h2.Range(Range("a2").Resize(cuenta, 5).Address) = matriz
End With
Set completa = Nothing: set matriz=nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas