Drucken & Zeilenumbruch mit VBA


Wutaler

Mitglied
Hallo zusammen,

meistens bin ich ja in den PHP-Foren etc. unterwegs, aber heute hat es mich nach Office verschlagen.

Ich arbeite an einem kleinen VBA-Programm, bin da auch gut weiter gekommen, nur es ist etwas "unelegant" gelöst.
Eventuell hat die Community ja eine bessere Lösung für mein Problemchen.

Folgender Sachverhalt:

Ich habe eine Excel datei in der es 7 Spalten gibt, nennen wir sie einfach Spalte 1-7.


| Spalte 1 | Spalte 2 | Spalte 3 | Spalte 4 | Spalte 5 | Spalte 6 | Spalte 7 |
---------------------------------------------------------------------------------------
| Wert 1.1 | Wert 2.1 | Wert 3.1 | Wert 4.1 | Wert 5.1 | Wert 6.1 | Wert 7.1 |
| Wert 1.2 | Wert 2.2 | Wert 3.2 | Wert 4.1 | Wert 5.2 | Wert 6.2 | Wert 7.2 |
| Wert 1.3 | Wert 2.3 | Wert 3.3 | Wert 4.1 | Wert 5.3 | Wert 6.3 |///////////|
| Wert 1.4 | Wert 2.4 | Wert 3.4 |///////////| Wert 5.4 | Wert 6.4 |///////////|
| Wert 1.5 | Wert 2.5 | Wert 3.5 |///////////| Wert 5.5 |///////////|///////////|
| Wert 1.6 | Wert 2.1 | Wert 3.6 |///////////| Wert 5.6 |///////////|///////////|
| Wert 1.7 |///////////| Wert 3.7 |///////////| Wert 5.7 |///////////|///////////|
| Wert 1.8 |///////////|///////////|///////////| Wert 5.8 |///////////|///////////|

So, die Darstellung nur zum Verständnis. Die //////////// sind nur als Platzhalter für die Formatierung der Tabelle gedacht, stellt euch das als leeres Feld vor.

Nun habe ich in VBA eine UserForm1 die eine ComboBox1 enthält, diese lädt die oberste Zeile, so das dort Spalte 1-7 auswählbar sind.
Je nach Auswahl wird die Spalte dann abgefragt und in eine ListBox1 eingefügt. Also wähle ich Spalte 5, werden alle Werte der Spalte 5 in die Listbox transferiert.
Funktioniert wunderbar.
Jetzt hat das VBA-Programm noch eine Schaltfläche "Drucken", wenn ich diese Drücke werden alle Werte der Listbox ausgedruckt. Jeder Wert auf eine Extra DinA4 Seite.
Denn, ich muss eine fertig ausgedruckte Seite, quasi ein reales Papierformular um die Werte aus Spalte X ergänzen:

Das klappt auch soweit indem ich ein Sheet genommen habe, dort ein Textfeld positioniert habe an der Stelle des Blattpapiers wo der Wert eingefügt werden soll.
Nun arbeitet das VBA-Programm eine Schleife so oft wie die ListBox1 einträge hat ab und fügt automatisch den Wert in die TextBox im Sheet ein und druckt es aus.

Funktioniert auch, aber wenn die Spalte 120 Werte enthält werden an den Drucker 120 Druckaufträge gesendet. Daher meine Frage nach dem Verbesserungspotential.
Wäre es möglich Excel zu sagen:
Trage den Wert ein, mache einen Seitenumbruch, trage auf der neuen Seite den nächsten Wert ein usw, bis die ListBox abgearbeitet ist. UND DANACH fange erst an zu drucken. Sprich, Sammle alle Blätter in einem Sheet zusammen und jage es als ein Druckauftrag los.

Hoffe ich habe mich verständlich ausgedrückt wie ich das meine :)


P.S.: Ja, ich weiß das es die möglichkeit des Serienbriefes durch Word gibt, möchte aber tatsächlich direkt aus Excel heraus drucken.
 
Zuletzt bearbeitet:

Yaslaw

n/a
Moderator
Wahrscheinlich geht das schon.
Ich versteh noch nicht ganz alles was du da schreibst.
Du druckst ein Sheet mehrfach aus, in dem du jeweils ein Eintrag der 120 einträgst?
Zeig doch mal den Code, den due zum ausdrucken hast.
 

Wutaler

Mitglied
Wahrscheinlich geht das schon.
Ich versteh noch nicht ganz alles was du da schreibst.
Du druckst ein Sheet mehrfach aus, in dem du jeweils ein Eintrag der 120 einträgst?
Zeig doch mal den Code, den due zum ausdrucken hast.
Visual Basic:
Private Sub CommandButton2_Click()
 
    Dim n As Integer
 
    For n = 0 To ListBox1.ListCount - 1
   
       
        Sheets("Druckvorlage").TextBox21.Text = CStr(ListBox1.List(n))  'Die TextBox in dem Vorlagensheet erhält Wert'
       
        Sheets("Druckvorlage").PrintOut Collate:=True
       
        Application.Wait Now + TimeSerial(0, 0, 1) 'Warteschleife nötig?'
   
    Next n

End Sub

Wenn ich das an einen "PDF-Drucker" sende klappt das, sende ich das ganze an unseren richtigen Drucker, dann druckt er mir komischerweise immer nur den ersten Listeneintrag aus.



Schöner wäre wirklich die Variante, das die Daten in der Liste Schritt für Schritt auf eine neue Seite gelegt werden und das ganze in einem Sheet und das dann der gesamte Sheet mit allen Seiten als ein Druckauftrag gesendet wird.
Das Problem ist, die sich ändernden Daten müssen auf jeder neuen Seite an der selben Position stehen. Weil das Druckpapier eine vorgedruckte Vorlage ist.
 
Zuletzt bearbeitet: