EXCEL VBA:创建简单循环以对每行重复一个过程

EXCEL VBA:创建简单循环以对每行重复一个过程,excel,vba,loops,pdf,row,Excel,Vba,Loops,Pdf,Row,我知道这似乎是一个非常简单的问题,但我尝试了不同的方法来创建一个循环,以实现我所寻找的: 基本上,我有一个excel表格,其中有4列(未知行数),我想在其中输入数据。然后将这些数据镜像到第二张包含“打印设计”的图纸上,我使用该图纸创建多个PDF文件。 问题是:我尝试了4天,现在创建一个循环,但并没有取得任何成果 如果您能帮助我,这是数据输入: 实际上,我想为每一行创建一个PDF文件,所以对第4、5、6行执行此操作,直到VBA找到一个空行 任何帮助都将不胜感激,提前感谢我在Stackoverfl

我知道这似乎是一个非常简单的问题,但我尝试了不同的方法来创建一个循环,以实现我所寻找的: 基本上,我有一个excel表格,其中有4列(未知行数),我想在其中输入数据。然后将这些数据镜像到第二张包含“打印设计”的图纸上,我使用该图纸创建多个PDF文件。 问题是:我尝试了4天,现在创建一个循环,但并没有取得任何成果

如果您能帮助我,这是数据输入:

实际上,我想为每一行创建一个PDF文件,所以对第4、5、6行执行此操作,直到VBA找到一个空行

任何帮助都将不胜感激,提前感谢我在Stackoverflow上找到的所有帮助,希望能有帮助

谢谢


Yannick

通常,在VBA中创建循环的好方法包括以下步骤:

  • 定义要循环的单元格范围
  • 将范围分配给变量(用
    Dim myRange声明为范围
  • 使用如下循环在范围的(单元格、行)上循环:
  • 变暗r为范围,myRange为范围 设置myRange=范围(工作表(“输入”)。单元格(4,4),工作表(“输入”)。单元格(4,4)。结束(xlDown)) 对于myRange.Cells中的每个r 转向器 下一个 这将
    myRange
    定义为从单元格(4,4)开始的范围,即D4,并尽可能向下延伸,直到有条目为止。然后,它将依次在每个单元格(D4、D5、D6等)上循环,并使用参数
    r
    调用Sub
    turnRowIntoPdf
    (依次为每个单元格)。然后,您可以编写一个子集,将此参数作为输入,并创建pdf


    你认为你可以从那里管理它吗?

    非常感谢你,你在这一点上真的帮了我。我唯一的新问题是,我创建了一个循环,但它生成相同的PDF文件,它基本上用不同的名称打印出相同的内容,但只在最后刷新页面。结果:代码没有像我希望的那样工作:(我可以建议你用相关代码将你的新问题作为新问题发布-不能在评论中这样做。“这是我的代码,这是结果。我期望有其他结果。我做错了什么?”在这里贴一个新问题的链接,我来看看。谢谢!几个小时前就已经创建了。我得到了一个建议,它或多或少可以工作,但会减慢宏的速度。我使用的是一台旧的公司PC,当我启动宏时,excel需要一些时间来创建50个文件。如果我将打印部分更改为
    。打印输出
    ,它实际上会根本不起作用,Excel崩溃:(
    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
    
    Dim r as Range, myRange as Range Set myRange = Range(Sheet("INPUT").cells(4,4), Sheet("INPUT").cells(4,4).end(xlDown)) For Each r in myRange.Cells turnRowIntoPdf r Next