132 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo zusammen,

ich habe einen Code geschrieben, aber leider komme ich nicht weiter. Ich habe zwei Datenblätter. Ich möchte aus den Tabellenblatt 1, Werte aus einer Zeile entnehmen und in das Tabellenblatt 2 in vorbestimmte Zellen einsetzen. Daraufhin soll ein PDF erstellt werden. Aus dem Tabellenblatt 1 soll dann die Werte aus der nächsten Zeile kopiert werden und in Tabellenblatt 2 in die vorbestimmten Zellen eingesetzt und erneut ein weiteres PDF erstellt werden. Das soll solange erfolgen, bis keine Werte mehr im Tabellenblatt 1 A und B vorhanden sind.

Konkretes Beispiel:

Tabellenblatt 1 enthält

Zeile Spalte A Spalte B
1 123 abc
2 456 def
3 789 ghi

Tabellenblatt 2 enthält

Zeile       Spalte H
12 123 (Input aus Tabellenblatt 1, A1)
13 abc (Input aus Tabellenblatt 1, B1)

Sub ErstellePDF2()
    Dim wb As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim rowH As Long
    
    'Setze die Arbeitsmappen- und Tabellenblatt-Referenzen
    Set wb = ThisWorkbook
    Set ws1 = wb.Sheets("Tabellenblatt 1")
    Set ws2 = wb.Sheets("Tabellenblatt 2")
    
    'Finde die letzte Zeile in Spalte A des Tabellenblatts 1
    lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
    
    'Setze die Startzeile für H12 und H13 in Tabellenblatt 2
    rowH = 12
    
    'Schleife zum Durchlaufen der Zeilen in Tabellenblatt 1
    For i = 2 To lastRow
        'Überprüfe, ob der Wert in Spalte A 0 ist
        If ws1.Cells(i, "A").Value = 0 Then
            Exit For 'Beende die Schleife, wenn der Wert 0 ist
        Else
            'Kopiere den Wert aus Spalte A in Tabellenblatt 2, Zelle H12
            ws2.Cells(rowH, "H").Value = ws1.Cells(i, "A").Value
            
            'Kopiere den Wert aus Spalte B in Tabellenblatt 2, Zelle H13
            ws2.Cells(rowH + 1, "H").Value = ws1.Cells(i, "B").Value
            
            'Erstelle das PDF aus Tabellenblatt 2 mit dem angegebenen Dateinamen
           ws2.ExportAsFixedFormat Type:=xlTypePDF, fileName:="Pfad\" & Range("V5") & ".pdf", Quality:=xlQualityStandard
        End If
    Next i
    
    'Optional: Schließe das Tabellenblatt 2, wenn es nicht mehr benötigt wird
    'wb.Sheets("Tabellenblatt2").Visible = False
End Sub

1 Antwort

0 Punkte
Beantwortet von xlking Experte (1.6k Punkte)

Hi,

habs jetzt nicht getestet, aber dein Script sieht soweit korrekt aus. Sollte soweit durchlaufen. An welcher Stelle kommst du denn nicht weiter?

Natürlich habe ich ein paar Kleinigkeiten entdeckt. Sind zwar eher unbedeutend, aber helfen vielleicht weiter:

  1. Die Bedingung, die zum Schleifenabbruch mit Exit For führt, brauchst du nicht, da du ja nur die Daten von Zeile 2 bis lastRow durchläufst und die Schleife danach beendet wird. Wenn du in den Daten irgendwo eine 0 drinstehen hast, führt diese Bedingung lediglich zum vorzeitigen Schleifenabbruch. Das willst du nicht wirklich, oder?
  2. Der Dateiname für die PDF steht offensichtlich in V5. Du hast aber nicht dazugeschrieben, in welchem Tabellenblatt sich diese Zelle befindet.
  3. Außerdem überspeicherst du jedesmal die bereits erstellte PDF der vorherigen Zeile. Du solltest also noch den Zähler i zum Dateinamen hinzufügen:
    fileName:="Pfad\" & ws1.Range("V5") & "_" & i - 1 & ".pdf"
  4. Wenn du den Optionalteil noch mit reinnehmen willst, solltest du lieber ws2.Visible = False machen. So vermeidest du den Tippfehler im Tabellennamen.
Gruß Mr. K.
...