0

我知道这似乎是一个非常简单的问题,但我尝试了不同的方法来创建一个循环来完成我正在寻找的事情:基本上我有一个包含 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

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

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

谢谢,

雅尼克

4

1 回答 1

2

一般来说,在 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,...)并调用turnRowIntoPdf带有参数的 Sub r(依次是这些单元中的每一个)。然后,您可以编写一个将此参数作为输入的子程序,并创建 pdf。

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

于 2013-07-02T14:12:12.483 回答