Macro que imprima en PDF 7 áreas de una hoja en Excel

Tengo una hoja llamada "Resumen del día", en dicha hoja lo que yo normalmente hago es escoger 7 áreas de impresión de dicha hoja y mandarlas a imprimir una por una en formato PDF. De esa manera obtengo 7 archivos PDF uno por cada área escogida.

Lo que deseo es una macro que me automatice esa labor y sea la misma macro la que me cree los 7 archivos PDF que normalmente hago manualmente.

En la columna A tengo especificados unas constantes que indican la fila de inicio y la fila de fin de cada una de las 7 áreas de impresión con la siguiente secuencia:
E1: Fila inicial del área 1
T1: Fila final del área 1
E2: Fila inicial del área 2
T2: Fila final del área 2
Y así sucesivamente hasta
E7: Fila inicial del área 7
T7: Fila final del área 7

Ahora bien, en cuanto a columnas:
El área 1 va de la columna B hasta la columna BG.
El área 2 va de la columna B hasta la columna BF.
El área 3 va de la columna B hasta la columna BF.
El área 4 va de la columna B hasta la columna BF.
El área 5 va de la columna E hasta la columna BH.
El área 6 va de la columna B hasta la columna BG.
El área 7 va de la columna E hasta la columna BH.

Para que quede más claro voy a explicar el ejemplo del área 1.
En la Hoja "Resumen del día" en la columna A la macro debe empezar a buscar desde la fila uno hasta el final, la primera celda que contenga "E1", cuando halle dicha celda, tome la fila de dicha celda como la inicial del área de impresión, desde la columna B y luego la macro busque en la columna A desde la fila anterior encontrada + 1, desde ahí hasta el final, la primera celda que contenga "T1", cuando halle dicha celda, tome la fila de dicha celda como la fila final del área de impresión, hasta la columna BG.
De esa manera el área de impresión será: B(E1):BG(T1)

Una vez seleccionada esa área de impresión, me imprima un archivo PDF de dicha área de impresión con el siguiente nombre: "XX de XXX de XXXX hoja X.pdf" en donde XX es el día de la fecha del momento (De dos dígitos osea que para el 2 de un mes seria 02), XXX es el mes de la fecha del momento (En letras osea Enero, Febrero, Marzo, etc), XXXX es el año del momento (por ejemplo 2.020) y X es la hoja que para el caso de la primera área de impresión es 1, la segunda es 2 y así sucesivamente hasta el área de impresión 7. Ejemplo: Para hoy el archivo debería quedar nombrado así: "13 de Junio de 2.020 hoja 1.pdf"
Una vez hecho este primera archivo, continuar con la siguientes áreas de impresión y sus correspondientes archivos.

1 Respuesta

Respuesta
2

La primera celda que contenga "E1", cuando halle dicha celda, tome la fila de dicha celda como la inicial del área de impresión

Entiendo que en alguna celda de la columna A vas a tener el texto "E1", ¿pero en dónde vas a tener el número de fila?

Puedes poner una imagen para ver los datos que tienes en la columna A (E1, T1, E2, T2, etc) y su correspondiente número de fila. Con una imagen es suficiente.

Pero recuerda que es que los números de fila pueden cambiar, algún día tal vez me toque ingresar una fila adicional entonces ese marcador ya sea T1 o E2 o cualquier otro va a cambiar de fila por eso es que puse los marcadores.

Osea lo que yo imaginaria que haría la macro es encontrar E1 por ejemplo y cuando lo encuentre ... pues esa fila en donde lo encontró es la fila inicial y cuando encuentre T1 esa es la fila final. Haz de cuenta que Los E son donde empiezan las áreas de impresión y las T donde terminan las áreas de impresión pero toca así por que es que en cualquier momento me toca insertar una fila y por eso se desplazan los marcadores a una fila más o viceversa si elimino una fila. Para mi los E y los T simplemente actúan de marcadores de inicio y fin de áreas de impresión.

Prueba la siguiente:

Sub Macro3()
  Dim ar1 As Variant, ar2 As Variant, f As Range, sh As Worksheet
  Dim i As Long, ini As Long, fin As Long, sNom As String, n As Long
  '
  Set sh = Sheets("Resumen del dia")
  ar1 = Array("E1", "T1", "E2", "T2", "E3", "T3", "E4", "T4", _
              "E5", "T5", "E6", "T6", "E7", "T7")
  ar2 = Array("B", "BG", "B", "BF", "B", "BF", "B", "BF", _
              "E", "BH", "B", "BG", "E", "BH")
  '
  For i = 0 To UBound(ar1) Step 2
    Set f = sh.Range("A:A").Find(ar1(i), , xlValues, xlWhole)
    If Not f Is Nothing Then
      ini = f.Row
      Set f = sh.Range("A:A").Find(ar1(i + 1), , xlValues, xlWhole)
      If Not f Is Nothing Then
        fin = f.Row
        n = n + 1
        sh.PageSetup.PrintArea = ar2(i) & ini & ":" & ar2(i + 1) & fin
        sNom = Format(Date, "dd") & " de " & Format(Date, "mmmm") & _
                      " de " & Format(Date, "yyyy") & " hoja " & n
        sh.ExportAsFixedFormat xlTypePDF, _
          ThisWorkbook.Path & "\" & sNom & ".pdf", _
          xlQualityStandard, True, False, , , False
      End If
    End If
  Next
End Sub

Ya puse la macro y la ejecuté pero no hace nada, ni saca error.

Me funciono excelente, lo que pasa es que tenia escondida esa columna A para que no se viera e hice la prueba y no hacia nada, pero me dio por probar nuevamente la macro con la columna A visible y me funciona tal cual como lo quería. No que que posibilidad halla que me le pudieras agregar al comienzo de la macro la opción de hacer visible la columna A y al final de la macro volverla a hacer invisible y de esa manera funcionaria excelente
Gracias

Prueba la siguiente:

Sub Macro3()
  Dim ar1 As Variant, ar2 As Variant, f As Range, sh As Worksheet
  Dim i As Long, ini As Long, fin As Long, sNom As String, n As Long
  '
  Set sh = Sheets("Resumen del dia")
  ar1 = Array("E1", "T1", "E2", "T2", "E3", "T3", "E4", "T4", _
              "E5", "T5", "E6", "T6", "E7", "T7")
  ar2 = Array("B", "BG", "B", "BF", "B", "BF", "B", "BF", _
              "E", "BH", "B", "BG", "E", "BH")
  sh.Columns("A:A").EntireColumn.Hidden = False
  '
  For i = 0 To UBound(ar1) Step 2
    Set f = sh.Range("A:A").Find(ar1(i), , xlValues, xlWhole)
    If Not f Is Nothing Then
      ini = f.Row
      Set f = sh.Range("A:A").Find(ar1(i + 1), , xlValues, xlWhole)
      If Not f Is Nothing Then
        fin = f.Row
        n = n + 1
        sh.PageSetup.PrintArea = ar2(i) & ini & ":" & ar2(i + 1) & fin
        sNom = Format(Date, "dd") & " de " & Format(Date, "mmmm") & _
                      " de " & Format(Date, "yyyy") & " hoja " & n
        sh.ExportAsFixedFormat xlTypePDF, _
          ThisWorkbook.Path & "\" & sNom & ".pdf", _
          xlQualityStandard, True, False, , , False
      End If
    End If
  Next
  sh.Columns("A:A").EntireColumn.Hidden = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas