【问题标题】:EXCEL VBA : Creating a simple loop to repeat a process for each rowEXCEL VBA:创建一个简单的循环来为每一行重复一个过程
【发布时间】:2013-06-29 22:38:04
【问题描述】:

我知道这似乎是一个非常简单的问题,但我尝试了不同的方法来创建一个循环来满足我的需求: 基本上我有一个 4 列(未知行数)的 Excel 表,我想在其中输入数据。然后将此数据镜像到包含我用来创建多个 PDF 文件的“印刷设计”的第二张纸上。 问题是:我现在尝试了 4 天来创建一个循环,但没有取得任何成果!

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

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

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

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

谢谢,

亚尼克

【问题讨论】:

    标签: excel vba loops pdf row


    【解决方案1】:

    一般来说,在 VBA 中创建循环的好方法包括以下步骤:

    1. 定义要循环的单元格范围
    2. 将范围分配给变量(以Dim myRange as Range 声明)
    3. 使用如下循环遍历范围的(单元格、行):
    将 r 调暗为范围,将 myRange 调为范围 设置 myRange = Range(Sheet("INPUT").cells(4,4), Sheet("INPUT").cells(4,4).end(xlDown)) 对于 myRange.Cells 中的每个 r turnRowIntoPdf r 下一个

    这会将myRange 定义为从单元格 (4,4) 开始的范围 - 即 D4 - 并一直向下直到有条目。然后它将依次遍历这些单元格中的每一个(D4、D5、D6...),并使用参数r(依次是这些单元格中的每一个)调用 Sub turnRowIntoPdf。然后,您可以编写一个将此参数作为输入的子程序,并创建 pdf。

    认为您可以从那里管理它?

    【讨论】:

    • 一千次谢谢,你真的帮了我这个忙。µ 我唯一的新问题是我创建了一个有效的循环,但它生成了相同的 PDF 文件,它基本上打印出相同的东西具有不同的名称,但仅在最后刷新页面。结果:代码没有像我想要的那样工作:(
    • 我可以建议您将您的新问题作为新问题发布为相关代码 - 不能在评论中这样做。 “这是我的代码,这是结果。我期待泰国的其他结果我做错了什么?”在此处发布新问题的链接,我会看一下。
    • 谢谢!几个小时前已经创建。我得到了一个或多或少的建议,但会大大减慢宏的速度。我在一台旧的公司 PC 上,当我启动宏 excel 时需要一些时间来创建 50 个文件。如果我将打印部分更改为 .PrintOut 它实际上根本不起作用并且 Excel 崩溃:( NEW QUESTION IS HERE
    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多