Macro que extrae más información de la deseada

Hace un tiempo me hiciste una macro que compara una matricula de un archivo contra otros que están en una carpeta y me extrae varios campos cuando los encuentra. El punto es que no había puestos matriculas diferentes y lo hice ahora para ver si la obviaba, pero no lo hizo y me extrajo ese dato también.

Necesito ayuda por favor para arreglal esta macro:

Sub BuscarMatriculas()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Set h1 = l1.Sheets("Hoja1")
'
If h1.[B5] = "" Then
MsgBox "Poner matrícula"
Exit Sub
End If
'
ruta = "D:\CENTRO EDUCATIVO FE Y ESPERANZA\carpeta de factura\"
'ruta = l1.Path & "\"
arch = Dir(ruta & h1.[N4] & "*.xls*")
col = "IT"
Do While arch <> ""
Set b = h1.Columns(col).Find(arch, lookat:=xlWhole)
If b Is Nothing Then
Set l2 = Workbooks.Open(ruta & arch)
Set h2 = l2.Sheets(1)
u = 11
Do While h1.Cells(u, "B") <> ""
u = u + 1
Loop
h1.Cells(u, "H") = h2.[O18]
h1.Cells(u, "G") = h2.[L11]
h1.Cells(u, "I") = h2.[N9]
h1.Cells(u, "E") = h2.[L13]
h1.Cells(u, "D") = h2.[H13]
h1.Cells(u, "C") = h2.[D13]
h1.Cells(u, "B") = h2.[N5]
h1.Cells(u, col) = arch
l2.Close False
End If
arch = Dir()
Loop
Application.ScreenUpdating = True
End Sub

Respuesta
1

H o l  a:

Pero esa macro que pusiste ya la había corregido en esta pregunta:

Modificar macro la cual compara dos campos en excel y extrae información.

Revisa que estés utilizando la macro correcta:

Sub BuscarMatriculas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("Hoja1")
    '
    If h1.[B5] = "" Then
        MsgBox "Poner matrícula"
        Exit Sub
    End If
    '
    ruta = "D:\COLEGIO MARIA TERESA QUIDIELLO\carpeta de factura\"
    'ruta = l1.Path & "\archivos\"
    arch = Dir(ruta & h1.[N5] & "*.xls*")
    col = "IT"
    Do While arch <> ""
        If arch <> l1.Name Then
            Set l2 = Workbooks.Open(ruta & arch)
            Set h2 = l2.Sheets(1)
            If h2.[N5] = h1.[B5] Then
                u = 8
                Do While h1.Cells(u, "D") <> ""
                    u = u + 1
                Loop
                h1.Cells(u, "E") = h2.[L13]
                h1.Cells(u, "D") = h2.[H13]
                h1.Cells(u, "C") = h2.[D13]
                h1.Cells(u, "G") = h2.[D20]
                h1.Cells(u, "I") = h2.[D18]
                h1.Cells(u, col) = arch
            End If
            l2.Close False
        End If
        arch = Dir()
    Loop
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

sal u dos

Lo hice para otro archivo, no en el arfchivo que te envíe cuando me la creaste y en ese archivo es que tengo inconvenientes.

Tengo que cambiar la letra que esta en la línea que muestro abajo por la ''I'', pero si lo hago y corro la macro más de una ves me repite la información donde debe colocarla. Necesito que no la repita todas las veces que la corra si ya esta.

Do While h1.Cells(u, "D") <> ""

Pero lo que hace la macro corregida es preguntar si las matrículas son iguales, si es así pasa la información de un libro a otro:

If h2.[N5] = h1.[B5] Then

Y lo que hace tu macro es lo contrario, pregunta si encuentra la matrícula, si no la encuentra entonces pasa la información de un libro a otro.

Set b = h1.Columns(col).Find(arch, lookat:=xlWhole)
If b Is Nothing Then

Mejor explícame qué necesitas y creo la macro nueva.

¿

Podrías por favor hacer una prueba cambiando la letra DE por la letra I en la línea que te muestro abajo de la macro que enviaste?

Do While h1.Cells(u, "D") <> ""

Y corre la macro dos veces para que veas que repite la misma información, eso es lo que trato de corregir

Pero para hacer la prueba necesito realizar sobre el mismo archivo que tú estás probando.

También necesito que me expliques qué es lo que esperas de resultado.

Si la macro no funciona tal vez, haya que realizar una nueva macro.

Envíame tu archivo y me explicas exactamente lo que esperas de resultado, entre más clara sea la explicación, más práctico será realizar la macro.

ok

Voy a enviarte el archivo plantilla (Mat.) Y dos archivos adicionales donde debe buscar la información.

Lo envíe

Ya recibí los archivos y te envié comentarios.

Te anexo la macro actualizada

Sub BuscarMatriculas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("Hoja1")
    '
    If h1.[B5] = "" Then
        MsgBox "Poner matrícula"
        Exit Sub
    End If
    '
    'ruta = "D:\Centro Educativo Fe y Esperanza\carpeta de factura\"
    ruta = l1.Path & "\"
    arch = Dir(ruta & h1.[B5] & "*.xls*")
    col = "IT"
    Do While arch <> ""
        'Busca archivo en la columna col para no repetrilo
        Set b = h1.Columns(col).Find(arch)
        If b Is Nothing Then
            'no lo encontró, entonces lo procesa
            If arch <> l1.Name Then
                Set l2 = Workbooks.Open(ruta & arch)
                Set h2 = l2.Sheets(1)
                If h2.[N4] = h1.[B5] Then
                    u = 11
                    Do While h1.Cells(u, "I") <> ""
                        u = u + 1
                    Loop
                    h1.Cells(u, "H") = h2.[O18]
                    h1.Cells(u, "G") = h2.[L11]
                    h1.Cells(u, "I") = h2.[N9]
                    h1.Cells(u, "E") = h2.[L13]
                    h1.Cells(u, "D") = h2.[H13]
                    h1.Cells(u, "C") = h2.[D13]
                    h1.Cells(u, "B") = h2.[N5]
                    h1.Cells(u, col) = arch
                End If
                l2.Close False
            End If
        End If
        arch = Dir()
    Loop
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas