Excel - VBA - Nummerierung
Hallo!
Ich habe eine Inventur-Liste in Excel erstellt, die beim Ausdruck durchnummeriert werden soll.
Dabei habe ich mir vorgestellt, dass beim Drucken eine Abfrage erscheint, in der die Anzahl der zu druckenden Seiten und der Startwert der Nummerierung abgefragt werden soll.
Die Blatt-Nr soll dabei ins Feld AG4 (Bereichsname: BlattNr) geschrieben werden.
Ich hab auch schon ne Weile rumprobiert, komm aber nicht auf das Ergebnis.
Bei diesem Beispiel druckt er mir nur eine Seite mit der Blatt-Nr 3 aus.
Könnt mir da jemand nen Tipp geben?
Ich habe eine Inventur-Liste in Excel erstellt, die beim Ausdruck durchnummeriert werden soll.
Dabei habe ich mir vorgestellt, dass beim Drucken eine Abfrage erscheint, in der die Anzahl der zu druckenden Seiten und der Startwert der Nummerierung abgefragt werden soll.
Die Blatt-Nr soll dabei ins Feld AG4 (Bereichsname: BlattNr) geschrieben werden.
Ich hab auch schon ne Weile rumprobiert, komm aber nicht auf das Ergebnis.
Bei diesem Beispiel druckt er mir nur eine Seite mit der Blatt-Nr 3 aus.
Könnt mir da jemand nen Tipp geben?
Dim iStartVal As Integer
Dim iSumPages As Integer
Dim iPageCount As Integer
Private Sub Workbook_BeforePrint(Cancel As Boolean)
iStartVal = Application.InputBox(Prompt:="Bitte geben Sie den Startwert der Nummerierung ein", _
Title:="Startwert eingeben", Type:=1)
iSumPages = Application.InputBox(Prompt:="Wie viele Seiten sollen gedruckt werden?", _
Title:="Seitenanzahl eingeben", Type:=1)
Do While iStartVal <= iSumPages
iPageCount = iPageCount + 1
Range("BlattNr") = iPageCount
ActiveSheet.PrintOut
Loop
End Sub
Please also mark the comments that contributed to the solution of the article
Content-Key: 127629
Url: https://administrator.de/contentid/127629
Printed on: April 19, 2024 at 00:04 o'clock
9 Comments
Latest comment
Hallo PixXel!
Das kann nicht funktionieren.
Das ist ein Fass ohne Boden. Du versuchst einen bereits fertigen Druckauftrag abzufangen und willst diesen umkrempeln und neu absenden (PrintOut), der wiederum abgefangen wird, um wieder umgekrempelt zu werden. Das nennt man Endlos-Schleifen.
Gruß Dieter
Das kann nicht funktionieren.
Das ist ein Fass ohne Boden. Du versuchst einen bereits fertigen Druckauftrag abzufangen und willst diesen umkrempeln und neu absenden (PrintOut), der wiederum abgefangen wird, um wieder umgekrempelt zu werden. Das nennt man Endlos-Schleifen.
Gruß Dieter
Hallo nochmal!
Mit ein paar Tricks, könntest Du es dennoch so machen:
Gruß Dieter
[edit] Variablen geändert [/edit]
Mit ein paar Tricks, könntest Du es dennoch so machen:
Option Explicit
Dim NoPrint As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim iStartVal As Integer, iSumPages As Integer, i As Integer
If NoPrint = True Then Exit Sub
Cancel = True
NoPrint = True
iStartVal = Application.InputBox(Prompt:="Bitte geben Sie den Startwert der Nummerierung ein", _
Title:="Startwert eingeben", Type:=1)
iSumPages = Application.InputBox(Prompt:="Wie viele Seiten sollen gedruckt werden?", _
Title:="Seitenanzahl eingeben", Type:=1)
If iStartVal <> 0 And iSumPages <> 0 Then
For i = 0 To iSumPages - 1
Range("AG4") = iStartVal + i: ActiveSheet.PrintOut
Next
End If
NoPrint = False
End Sub
Gruß Dieter
[edit] Variablen geändert [/edit]
Hallo PixXel!
Das kann ich mir sehr gut vorstellen
Gruß Dieter
Das kann ich mir sehr gut vorstellen
Gruß Dieter
Hallo PixXel!
Das ist irgendwie logisch, weil ja durch die jeweilige Sheetänderung (AG4) jeweils ein eigner Druckauftrag erfolgt.
Wenn Du die Seitenzahlen nicht über die Fußzeilen machen willst, dann fällt mir im Moment nur das ein:
Vor dem Druckauftrag - per Makro - Sheets-Kopien entsprechend der Seitenzahl erstellen und anschließend wieder löschen.
Denke mal drüber nach, wie Du es machen willst und nutze die Makroaufzeichnung für die entsprechende Code-Anpassung.
Ich muss jetzt leider weg. Von daher kann es dauern, falls Du Hilfe benötigst
Gruß Dieter
Das ist irgendwie logisch, weil ja durch die jeweilige Sheetänderung (AG4) jeweils ein eigner Druckauftrag erfolgt.
Wenn Du die Seitenzahlen nicht über die Fußzeilen machen willst, dann fällt mir im Moment nur das ein:
Vor dem Druckauftrag - per Makro - Sheets-Kopien entsprechend der Seitenzahl erstellen und anschließend wieder löschen.
Denke mal drüber nach, wie Du es machen willst und nutze die Makroaufzeichnung für die entsprechende Code-Anpassung.
Ich muss jetzt leider weg. Von daher kann es dauern, falls Du Hilfe benötigst
Gruß Dieter
Hallo PixXel!
Als ein Druckauftrag mit Sheet-Nummerierung, würde es so gehen
Gruß Dieter
Als ein Druckauftrag mit Sheet-Nummerierung, würde es so gehen
Option Explicit
Dim NoPrint As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim PrintArray As Variant, CleanArray As Variant
Dim iStartVal As Integer, iSumPages As Integer, i As Integer
If NoPrint = True Then Exit Sub
Cancel = True
NoPrint = True
iStartVal = Application.InputBox(Prompt:="Bitte geben Sie den Startwert der Nummerierung ein", _
Title:="Startwert eingeben", Type:=1)
iSumPages = Application.InputBox(Prompt:="Wie viele Seiten sollen gedruckt werden?", _
Title:="Seitenanzahl eingeben", Type:=1)
If iStartVal <> 0 And iSumPages <> 0 Then
ReDim PrintArray(iSumPages - 1): ReDim CleanArray(1 To iSumPages - 1)
PrintArray(0) = ActiveSheet.Name
Range("AG4") = iStartVal
Application.ScreenUpdating = False
For i = 1 To iSumPages - 1
ActiveSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "P#" & i
PrintArray(i) = ActiveSheet.Name
CleanArray(i) = ActiveSheet.Name
Range("AG4") = iStartVal + i:
Next
Sheets(PrintArray).PrintOut Copies:=1, Collate:=True
Application.DisplayAlerts = False
Sheets(CleanArray).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End If
NoPrint = False
End Sub
Gruß Dieter
Hallo PixXel!
Das Problem hierbei ist, dass Excel (auch ohne Makro) je Kopie einen seperaten Druckauftrag erstellt und dann passiert das wieder mit den Pausen.
Also, ist es sinnvoller, die gleiche Methode mit wahlweiser Seitennummerierung zu verwenden.
Ausgehend von meinem Script ohne zusätzlichen Input. D.h. Startnummer 0 = Keine Seitennummerierung
müsstest Du nur folgendes ändern:
in Zeile 21
in Zeile 26 und Zeile 35:
Gruß Dieter
Das Problem hierbei ist, dass Excel (auch ohne Makro) je Kopie einen seperaten Druckauftrag erstellt und dann passiert das wieder mit den Pausen.
Also, ist es sinnvoller, die gleiche Methode mit wahlweiser Seitennummerierung zu verwenden.
Ausgehend von meinem Script ohne zusätzlichen Input. D.h. Startnummer 0 = Keine Seitennummerierung
müsstest Du nur folgendes ändern:
in Zeile 21
If iSumPages <> 0 Then |
If iStartVal <> 0 Then Range... |
Gruß Dieter