Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Excel - VBA - Nummerierung

Frage Entwicklung VB for Applications

Mitglied: PixXel

PixXel (Level 1) - Jetzt verbinden

21.10.2009 um 13:51 Uhr, 6167 Aufrufe, 9 Kommentare

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?


01.
Dim iStartVal As Integer 
02.
Dim iSumPages As Integer 
03.
Dim iPageCount As Integer 
04.
 
05.
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
06.
 
07.
iStartVal = Application.InputBox(Prompt:="Bitte geben Sie den Startwert der Nummerierung ein", _ 
08.
      Title:="Startwert eingeben", Type:=1) 
09.
 
10.
iSumPages = Application.InputBox(Prompt:="Wie viele Seiten sollen gedruckt werden?", _ 
11.
      Title:="Seitenanzahl eingeben", Type:=1) 
12.
 
13.
Do While iStartVal <= iSumPages 
14.
    iPageCount = iPageCount + 1 
15.
    Range("BlattNr") = iPageCount 
16.
    ActiveSheet.PrintOut 
17.
Loop 
18.
 
19.
End Sub
Mitglied: 76109
21.10.2009 um 14:43 Uhr
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
Bitte warten ..
Mitglied: 76109
21.10.2009 um 15:08 Uhr
Hallo nochmal!

Mit ein paar Tricks, könntest Du es dennoch so machen:
01.
Option Explicit 
02.
 
03.
Dim NoPrint As Boolean 
04.
 
05.
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
06.
    Dim iStartVal As Integer, iSumPages As Integer, i As Integer 
07.
 
08.
    If NoPrint = True Then Exit Sub 
09.
     
10.
    Cancel = True 
11.
     
12.
    NoPrint = True 
13.
 
14.
    iStartVal = Application.InputBox(Prompt:="Bitte geben Sie den Startwert der Nummerierung ein", _ 
15.
      Title:="Startwert eingeben", Type:=1) 
16.
 
17.
    iSumPages = Application.InputBox(Prompt:="Wie viele Seiten sollen gedruckt werden?", _ 
18.
      Title:="Seitenanzahl eingeben", Type:=1) 
19.
     
20.
    If iStartVal <> 0 And iSumPages <> 0 Then 
21.
        For i = 0 To iSumPages - 1 
22.
            Range("AG4") = iStartVal + i:  ActiveSheet.PrintOut 
23.
        Next 
24.
    End If 
25.
     
26.
    NoPrint = False 
27.
End Sub
Gruß Dieter

[edit] Variablen geändert [/edit]
Bitte warten ..
Mitglied: PixXel
22.10.2009 um 09:45 Uhr
Genial! Tausend Dank für Deine Hilfe!
Ich wär bestimmt noch daran verzweifelt


Liebe Grüße

Tom
Bitte warten ..
Mitglied: PixXel
22.10.2009 um 10:29 Uhr
Leider ist nun zwischen jedem gedruckten Blatt eine Pause von ca. 5 Sekunden, da alles als eigener Job gedruckt wird.
Gibt's dafür vielleicht auch eine Möglichkeit die Druckaufträge in einen gesammelten zusammenzufassen?
Bitte warten ..
Mitglied: 76109
22.10.2009 um 10:35 Uhr
Hallo PixXel!

Zitat von PixXel:
Ich wär bestimmt noch daran verzweifelt
Das kann ich mir sehr gut vorstellen

Gruß Dieter
Bitte warten ..
Mitglied: 76109
22.10.2009 um 11:05 Uhr
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
Bitte warten ..
Mitglied: 76109
22.10.2009 um 16:03 Uhr
Hallo PixXel!

Als ein Druckauftrag mit Sheet-Nummerierung, würde es so gehen
01.
Option Explicit 
02.
 
03.
Dim NoPrint As Boolean 
04.
 
05.
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
06.
    Dim PrintArray As Variant, CleanArray As Variant 
07.
    Dim iStartVal As Integer, iSumPages As Integer, i As Integer 
08.
 
09.
    If NoPrint = True Then Exit Sub 
10.
     
11.
    Cancel = True 
12.
     
13.
    NoPrint = True 
14.
 
15.
    iStartVal = Application.InputBox(Prompt:="Bitte geben Sie den Startwert der Nummerierung ein", _ 
16.
      Title:="Startwert eingeben", Type:=1) 
17.
 
18.
    iSumPages = Application.InputBox(Prompt:="Wie viele Seiten sollen gedruckt werden?", _ 
19.
      Title:="Seitenanzahl eingeben", Type:=1) 
20.
     
21.
    If iStartVal <> 0 And iSumPages <> 0 Then 
22.
        ReDim PrintArray(iSumPages - 1):  ReDim CleanArray(1 To iSumPages - 1) 
23.
         
24.
        PrintArray(0) = ActiveSheet.Name 
25.
         
26.
        Range("AG4") = iStartVal 
27.
         
28.
        Application.ScreenUpdating = False 
29.
         
30.
        For i = 1 To iSumPages - 1 
31.
            ActiveSheet.Copy After:=ActiveSheet 
32.
            ActiveSheet.Name = "P#" & i 
33.
            PrintArray(i) = ActiveSheet.Name 
34.
            CleanArray(i) = ActiveSheet.Name 
35.
            Range("AG4") = iStartVal + i: 
36.
        Next 
37.
         
38.
        Sheets(PrintArray).PrintOut Copies:=1, Collate:=True 
39.
         
40.
        Application.DisplayAlerts = False 
41.
        Sheets(CleanArray).Delete 
42.
        Application.DisplayAlerts = True 
43.
         
44.
        Application.ScreenUpdating = True 
45.
    End If 
46.
     
47.
    NoPrint = False 
48.
End Sub

Gruß Dieter
Bitte warten ..
Mitglied: PixXel
23.10.2009 um 09:48 Uhr
Danke nochmal für Deine Hilfe Dieter!
Das funktioniert wunderbar.
Aber ein (für Dich) winziges Problem hab ich noch: Zeile 53 macht nicht was sie soll.
Falls keine Nummerierung gewünscht wird, soll er das Blatt trotzdem mehrmals drucken. Kommt aber nur eins raus.
Darf ich Dich noch einmal um eine Minute Deiner Freizeit bringen ?

01.
Option Explicit 
02.
 
03.
Dim NoPrint As Boolean 
04.
Dim DoNum As Boolean 
05.
 
06.
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
07.
 
08.
    Dim PrintArray As Variant 
09.
    Dim CleanArray As Variant 
10.
    Dim iStartVal As Integer 
11.
    Dim iSumPages As Integer 
12.
    Dim i As Integer 
13.
 
14.
    If NoPrint = True Then Exit Sub 
15.
     
16.
    Cancel = True 
17.
     
18.
    NoPrint = True 
19.
 
20.
    Application.Dialogs(xlDialogPrinterSetup).Show 
21.
     
22.
    iSumPages = Application.InputBox(Prompt:="Wie viele Seiten sollen gedruckt werden?", _ 
23.
        Title:="Seitenanzahl eingeben", Type:=1) 
24.
     
25.
    DoNum = MsgBox("Sollen die Blätter automatisch nummeriert werden?", vbQuestion + vbYesNo, "Nummerierung hinzufügen?") = vbYes 
26.
         
27.
    If DoNum Then iStartVal = Application.InputBox(Prompt:="Bitte geben Sie den Startwert der Nummerierung ein", _ 
28.
        Title:="Startwert eingeben", Type:=1) 
29.
 
30.
    If DoNum Then 
31.
        If iStartVal <> 0 And iSumPages <> 0 Then 
32.
            ReDim PrintArray(iSumPages - 1):  ReDim CleanArray(1 To iSumPages - 1) 
33.
            PrintArray(0) = ActiveSheet.Name 
34.
            Application.ScreenUpdating = False 
35.
            Range("BlattNr") = iStartVal 
36.
             
37.
            For i = 1 To iSumPages - 1 
38.
                ActiveSheet.Copy After:=ActiveSheet 
39.
                ActiveSheet.Name = "P#" & i 
40.
                PrintArray(i) = ActiveSheet.Name 
41.
                CleanArray(i) = ActiveSheet.Name 
42.
                Range("BlattNr") = iStartVal + i: 
43.
            Next 
44.
            Sheets(PrintArray).PrintOut Copies:=1, Collate:=True 
45.
            Application.DisplayAlerts = False 
46.
            Sheets(CleanArray).Delete 
47.
            Sheets(PrintArray(0)).Activate 
48.
            Application.DisplayAlerts = True 
49.
            Application.ScreenUpdating = True 
50.
        End If 
51.
    Else 
52.
        If iSumPages <> 0 Then 
53.
            Range("BlattNr") = "":  ActiveSheet.PrintOut Copies:=iSumPages, Collate:=True 
54.
        End If 
55.
    End If 
56.
         
57.
    NoPrint = False 
58.
     
59.
    Range("BlattNr") = "" 
60.
     
61.
End Sub
Bitte warten ..
Mitglied: 76109
23.10.2009 um 10:44 Uhr
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
If iSumPages <> 0 Then
in Zeile 26 und Zeile 35:
If iStartVal <> 0 Then Range...

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Microsoft Office
Excel VBA: Tranferieren von Werten aus Quelldatei in die Masterdatei mit SVERWEIS (3)

Frage von peter.schroeder zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...