0

非常に単純な質問のように思えるかもしれませんが、探していることを実行するループを作成するためにさまざまな方法を試しました:基本的に、4列(不明な行数)のExcelシートがあり、データを入力します。このデータは、複数の PDF ファイルを作成するために使用する「印刷デザイン」を含む 2 番目のシートにミラ​​ーリングされます。問題は次のとおりです。ループを作成するために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

実際には、行ごとに1つのSINGLE PDFファイルを作成したいので、VBAが空の行を見つけるまで、行4、5、6などに対してこれを行います。

Stackoverflow で見つけることができたすべてのヘルプに感謝します。

ありがとう、

ヤニック

4

1 に答える 1

2

一般に、VBA でループを作成する適切な方法には、次の手順が含まれます。

  1. ループするセルの範囲を定義します
  2. 範囲を変数に代入 ( で宣言Dim myRange as Range)
  3. 次のようなループを使用して、範囲の (セル、行) をループします。
    Dim r as Range、myRange as Range
    設定 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 に答える