Macro para Crear Archivos EXCEL según autofiltro

Quisiera me pudieran ayudar en lo siguiente:

Lo que tengo es un excel con una base. Y necesito que se genere un archivo nuevo por cada uno de los países que se encuentran en esa base. La idea es que este excel genere filtro avanzado en base a un listado de campos (Código de País), seleccione todo lo filtrado, lo copie y lo pegue en un nuevo archivo, guardándolo con el nombre del código del país y su nombre en un excel.

1 respuesta

Respuesta
1

 H o l a:

Envíame un correo nuevo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Jorge” y el título de esta pregunta.

Anexo la macro ajustada

También ajusté el código en el botón "Buscar":

Private Sub CommandButton2_Click()   'BUSCAR IDENTIFICACION CONCEPTO ALFANUMERICO
                                     'DE OBRA
    'Application.ScreenUpdating = False
    For Each h In Sheets
        n = h.Name
        If UCase(h.Name) = UCase(ComboBox1) Then
            existe = True
            Exit For
        End If
    Next
    If existe = False Then
        MsgBox "La hoja seleccionada no existe", vbCritical, "SELECCIONAR OBRA"
        ComboBox1.SetFocus
        Exit Sub
    End If
    '--------------------
    Set h1 = Sheets(ComboBox1.Value)
    Label17 = h1.Range("C18")
    Set b = h1.Columns("C").Find(what:=TextBox14, lookat:=xlWhole) ', LookIn:=xlValues) ¿ESTA FUNCIONA CON TextBox
    If Not b Is Nothing Then
        TextBox8 = h1.Range("D" & b.Row)
        TextBox9 = h1.Range("E" & b.Row)
        TextBox10 = h1.Range("G" & b.Row)
        TextBox11 = Format(h1.Range("F" & b.Row).Value, "#.00")
        TextBox12 = Format(h1.Range("H" & b.Row).Value, "#.00")
        TextBox13 = Format(h1.Range("I" & b.Row).Value, "#.00")
        TextBox15 = Format(h1.Range("J" & b.Row).Value, "#.00")
        '------------
        If TextBox19 = 0 Or TextBox19 = "" Then 'correcto
            MsgBox "El Concepto no presenta estimación," & Chr(13) & "Deseas capturar la primara estimación...? .", vbOKOnly + vbInformation + vbYesNo '"Aviso"
            'si la respuesta es si, then
            Range("b" & Cells.Rows.Count).End(xlUp).Offset(1).Select
            ActiveCell.Offset(16, 1) = "1"
        Else
            ActiveCell.Offset(16, 1) = "  "
            Exit Sub
        End If
        '------------
        TextBox16.SetFocus   'ok
        '------------
    Else
        MsgBox "El Dato no fue encontrado." & Chr(13) & "Intente de nuevo.", vbOKOnly + vbInformation, "Aviso"
        TextBox14 = ""    'ok
        TextBox14.SetFocus 'ok
    End If
    '----------------------------------
    h1.Cells(18, 11) = "ESTIMACION, 1"
    h1.Cells(19, 11) = "CANT"
    h1.Cells(19, 12) = "IMPORTE"
    Application.ScreenUpdating = True
    TextBox16 = ""
    TextBox17 = ""
End Sub     

H o l a:

Te anexo la macro correcta para generar archivos:

Sub CrearArchivos()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("Hoja1")
    Set h2 = l1.Sheets("Hoja2")
    Set h3 = l1.Sheets("Hoja3")
    ruta = l1.Path & "\"
    h1.Range("A:A, D:E").Copy h2.[A1]
    h2.[E1] = h2.[A1]
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    h2.Range("A1:C" & u1).RemoveDuplicates Columns:=1, Header:=xlYes
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        h3.Cells.Clear
        h2.[E2] = h2.Cells(i, "A")
        h1.Range("A1:I" & u1).AdvancedFilter xlFilterCopy, h2.[E1:E2], h3.[A1], False
        h3.Copy
        Set l2 = ActiveWorkbook
        nombre = h2.Cells(i, "C") & "-" & h2.Cells(i, "A") & "-" & h2.Cells(i, "B")
        l2.SaveAs Filename:=ruta & nombre & ".xlsx", FileFormat:=xlOpenXMLWorkbook
        l2.Close
    Next
    Application.ScreenUpdating = True
    MsgBox "Archivos generados"
End Sub

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas