Exportar de Excel a pdf seleccionando las hoja utilizadas

Para Dante amor

Hola Dante, ¿espero te encuentres bien? Necesito una mano con dos problemas que tengo. El primero es que tengo una planilla con varias hojas a la cual le ingreso el nombre del cliente en la celda G4 en cada hoja. Porque depende lo que venda es la que se utiliza. Necesito que igresar el nombre del cliente a una y que las replique a todas las hojas pero que solo guarde en pdf las que se utilizaron. La celda de referencia el la L4 si es diferente a Cero se graba. No se si me explique bien. Te adjunto el código que me armaste anteriormente. Muchas gracias

""Sub GuardarPDF()
    Dim hojas()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ruta = "C:\Ventas\Facturación 2016\"
    'ruta = "C:\trabajo\"
    n = -1
    For Each h In Sheets
        If h.[L4] <> "" Then
            n = n + 1
            ReDim Preserve hojas(n)
            hojas(n) = h.Name
            If nomb = "" Then
                nomb = h.[G4] & " " & Format(h.Range("G2"), "dd-mm-yyyy") + Format(Now, "(hh'mm)") & ".pdf"
            End If
        End If
    Next
    '
    If n > -1 Then
        usuario = Environ$("computername")
        Set h = Sheets("usuarios")
        Set b = h.Columns("A").Find(usuario)
        If b Is Nothing Then
            MsgBox "El usuario: " & usuario & " no existe en la hoja 'usuarios'", vbCritical
            Exit Sub
        End If
        '
        correos = b.Offset(0, 1)
        Sheets(hojas).Copy
        ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & nomb, _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=False
        ActiveWorkbook.Close False
        '
        Set dam = CreateObject("outlook.application").createitem(0)
        dam.To = correos
        dam.Subject = nomb
        dam.Body = "Orden de Pedido"
        dam.Attachments.Add ruta & nomb
        dam.Display 'El correo se envía en automático
        'dam.Display 'El correo se muestra
        '
        MsgBox "Orden lista para enviar, favor revisar correo"
    End If
End Sub

1 respuesta

Respuesta
1

Te anexo la macro actualizada

Pero antes deberás cambiar "Hoja1" en la macro por el nombre de la hoja donde vas a poner el nombre del cliente. La macro tomará ese nombre y lo replicará en todas las hojas.

Sub GuardarPDF_2()
'Por.Dante Amor
    Dim hojas()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ruta = "C:\Ventas\Facturación 2016\"
    'ruta = "C:\trabajo\"
    n = -1
    Set h1 = Sheets("Hoja1")        'Primera hoja donde vas a poner el cliente
    '
    cliente = h1.Range("G4")
    If cliente = "" Then
        MsgBox "Debes capturar el cliente en la primera hoja", vbCritical
        Exit Sub
    End If
    '
    For Each h In Sheets
        h.[G4] = cliente
        If h.[L4] <> "" Then
            n = n + 1
            ReDim Preserve hojas(n)
            hojas(n) = h.Name
            If nomb = "" Then
                nomb = h.[G4] & " " & Format(h.Range("G2"), "dd-mm-yyyy") + Format(Now, "(hh'mm)") & ".pdf"
            End If
        End If
    Next
    '
    If n > -1 Then
        usuario = Environ$("computername")
        Set h = Sheets("usuarios")
        Set b = h.Columns("A").Find(usuario)
        If b Is Nothing Then
            MsgBox "El usuario: " & usuario & " no existe en la hoja 'usuarios'", vbCritical
            Exit Sub
        End If
        '
        correos = b.Offset(0, 1)
        Sheets(hojas).Copy
        ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & nomb, _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=False
        ActiveWorkbook.Close False
        '
        Set dam = CreateObject("outlook.application").createitem(0)
        dam.To = correos
        dam.Subject = nomb
        dam.Body = "Orden de Pedido"
        dam.Attachments.Add ruta & nomb
        dam.Display 'El correo se envía en automático
        'dam.Display 'El correo se muestra
        '
        MsgBox "Orden lista para enviar, favor revisar correo"
    End If
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! 

Dante, sabes que cuando ejecuto la macro, me sigue guardando todas las hojas. Además después, de ejecutarla si me guarda los clientes en todas las hojas. Necesito que me guarde el PDF solo las hojas que tienen ventas.

Gracias por tu ayuda!!

Qué tienes en la celda L4, ¿tienes vacío o un cero?

Si tienes un cero, entonces cambia esta línea de la macro

If h.[L4] <> "" Then

Por esta

If h.[L4] <> 0 Then

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas