Sé que puede parecer una pregunta muy simple, pero he probado diferentes métodos para crear un bucle que haría lo que estoy buscando:
Básicamente tengo una hoja de excel con 4 columnas (se desconoce el número de filas) en la que quiero acceder a los datos. Estos datos se reflejan en una segunda hoja que contiene el «diseño de impresión» que yo uso para crear varios archivos PDF.
El problema es: he intentado por 4 días para crear un bucle y no han logrado nada!

Si usted me podría ayudar, esta es la entrada de datos:
CAPTURA de pantalla

Public Sub InputData()
Dim strCap As String
strCap = Sheets("INPUT").Cells(4, 3).Value
Label1.Caption = strCap
Dim strCap2 As String
strCap2 = Sheets("INPUT").Cells(4, 5).Value
Label2.Caption = strCap2
If Sheets("INPUT").Cells(4, 4) = "OE" Then
Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\OE_Logo.jpg")
Else
Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\SF_Logo.jpg")
End If
If Sheets("INPUT").Cells(4, 6) = "OE" Then
Image2.Picture = LoadPicture(ActiveWorkbook.Path & "\OE_Logo.jpg")
Else
Image2.Picture = LoadPicture(ActiveWorkbook.Path & "\SF_Logo.jpg")
End If
Application.Calculate
Call PrintPDF
End Sub
Sub PrintPDF()
Dim pdfjob As Object
Dim sPDFName As String
Dim sPDFPath As String
'///Change the output file name here! ///
sPDFName = "Affidavit" & " " & Sheets("INPUT").Cells(4, 3) & "_" & Sheets    ("INPUT").Cells(4, 5) & ".pdf"
sPDFPath = ActiveWorkbook.Path & Application.PathSeparator
'Check if worksheet is empty and exit if so
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cClearCache
End With
'Print the document to PDF
Sheets("AFFIDAVIT CREATOR").PrintOut Copies:=1, From:=1, To:=1, ActivePrinter:="PDFCreator"
'Wait until the print job has entered the print queue
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
'Wait until PDF creator is finished then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
Set pdfjob = Nothing
End Sub

Quiero crear Un ÚNICO archivo PDF por cada fila, por lo que hacer esto para la fila 4, 5, 6, etc. hasta VBA encuentra una fila vacía.

Cualquier ayuda sería muy apreciada, gracias de antemano por toda la ayuda que yo era capaz de encontrar en Stackoverflow y espero ayudar a venir!

Gracias,

Yannick

1 Comentario

  1. 2

    En general, una buena manera para crear un bucle en VBA incluye los siguientes pasos:

    1. Definir el rango de celdas sobre las que quieres bucle
    2. Asignar el rango de una variable (declarado con Dim myRange as Range)
    3. Lazo sobre la (celdas, filas) de la gama, con un bucle como este:
     Dim r como Rango, myRange como Rango 
    Conjunto de myRange = Rango(de la Hoja("INPUT").las células(4,4), Hoja("INPUT").las células(4,4).end(xlDown)) 
    Para Cada r en myRange.Las células 
    turnRowIntoPdf r 
    Siguiente 
    

    Esto va a definir myRange a ser el rango que comienza en la celda (4,4) – es decir, D4 – y se va tan lejos como entradas. Será, entonces, un bucle en cada una de estas células a su vez (D4, D5, D6, …) y llamar a un Sub turnRowIntoPdf con el parámetro r (que será cada una de estas células a su vez). A continuación, puede escribir un sub que toma este parámetro como entrada, y crea el pdf.

    Creo que se puede gestionar desde allí?

    • Mil veces GRACIAS, realmente me ayudó en esto.µ Mi único PROBLEMA es que he creado un bucle en el que está trabajando, pero que genera idéntico archivos PDF, que básicamente se imprime la misma cosa con diferentes nombres, pero actualiza la página sólo al final. Resultado: el código no funciona como yo quiero 🙁
    • Me permito sugerir que usted publique su nuevo problema como una nueva pregunta con el código correspondiente – no puedo hacer que en un comentario. «Aquí está mi código, este es el resultado. Yo esperaba Thais otro resultado, ¿Qué estoy haciendo mal?» Publicar un enlace a la nueva pregunta aquí y voy a echar un vistazo.
    • Gracias! Ya se creó un par de horas atrás. Tengo una sugerencia que funciona más o menos, pero ralentiza la macro mucho. Estoy en una vieja compañía de PC y cuando me voy a lanzar la macro de excel, toma algún tiempo para crear digamos 50 archivos. Si puedo cambiar la Impresión de la parte a .PrintOut que en realidad no funciona en absoluto y Excel se bloquea 🙁 NUEVA PREGUNTA ES AQUÍ

Dejar respuesta

Please enter your comment!
Please enter your name here