Top-Themen

Aktuelle Themen (A bis Z)

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, 6236 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 ..
Ähnliche Inhalte
VB for Applications
Aus Excel speichern als PDF mit Nummerierung
gelöst Frage von TIM589VB for Applications3 Kommentare

Ich habe ein kleines Programm geschrieben, bei dem man mit einer Excel Vorlage eine Rechnung schreiben kann. Im Fenster, ...

Microsoft Office
VBA und Excel
gelöst Frage von cosmonautMicrosoft Office6 Kommentare

Ich habe eine "Aufgabe" zum Thema VBA programmieren. Dazu habe ich eine Exceltabelle, - dessen Inhalt ich nach bestimmten ...

VB for Applications
Per VBA oder Makro Nummerierung und Name aus DB eintragen
Frage von evolutionVB for Applications

Hallo, ich habe folgendes Anliegen. Ich suche eine Lösung um in Word und Excel-Dokumenten automatisch in der Fußzeile eine ...

Microsoft
Excel-Datei mit VBA speichern
gelöst Frage von 116408Microsoft6 Kommentare

Guten Tag Ich habe eine Excel-Datei, in der in D4 der Kundenname und in D11 das Projekt benennt wird. ...

Neue Wissensbeiträge
Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 StundeHumor (lol)2 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 17 StundenMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 17 StundenSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 19 StundenAdministrator.de Feedback10 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Linux
OpenSource Groupware
Frage von FA-jkaLinux13 Kommentare

Hallo, ich suche eine Groupware als Alternative zum Exchange. Wesentliche Aufgaben sind die Handhabung von E-Mails (persönliche und gemeinsam ...