Fortlaufende Seriennummer

Hallo !

Ich versuche eine Seriennummer in Excel zu generieren, die sich bei jedem Ausdruck automatisch um 1 erhöht!
Es muß wohl ein Makro sein, das bei jeder Aktion „Drucken“ eine Variable eins hochzählt.
Weiß vielleicht jemand wie das geht, oder hat vielleicht so was ähnliches mal gemacht?

Grüße, Kerstin!

Moin Kerstin,

Du hast schon eine richtige Vermutung. Makro aber auch noch etwas mehr… (ich hab’s unter Office XP probiert)

Damit Du dir die Standard-Vorlagen nicht schrottest, empfehle ich Makros (Punkt 2) und Menüanpassung (Punkt 3) nur für die aktuelle Arbeitsmappe zu speichern!

  1. Eine Dokumenteneigenschaft festlegen
    Datei->Eigenschaften->Anpassen
    Name: Dokumentnummer
    Typ: Zahl
    Wert 0

->hinzufügen
->OK

  1. ein Makro
    Sub zaehleUndDrucke()
    Dim d As Integer
    d = ActiveWorkbook.CustomDocumentProperties(„Dokumentnummer“)
    ActiveWorkbook.CustomDocumentProperties(„Dokumentnummer“) = d + 1

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

End Sub

  1. Druck-Funktion anpassen
    Extras->Anpassen->Befehle
    Kategorie: Datei
    Name: Drucken ()

Jetzt klicke mit der rechten Maustaste auf das Druckersymbol und wähle „Makro zuweisen…“
Nur noch das zaehleUndDrucke Makro von oben finden und zuweisen, das war’s.

Achtung: das Hochzählen und drucken funzt nach diesem Beispiel nur:

  • auf dem Standarddrucker
  • mit den aktuellen Druckereinstellungen
    Aber nicht, wenn man über Datei->Drucken… geht.
    Ein anderer Nachteil ist, das „versierte“ Anwender die Dokumenteneigenschaft auch manipulieren können.

Hope this helps…

Cheers!
Hawky

Geht auch einfacher …
Moin Kerstin,

Dein Problem ist nicht neu - das kam schon öfters hier in den vergangenen knapp sieben Jahren :wink: Aber ich habe erst jetzt mal geguckt, was man da machen kann und bin auf eine einfache Lösung gestossen, wenngleich auch nicht ohne Makro. Der Vorteil ist, dass man als Nutzer nichts davon merkt und drucken kann, wie man will:

Private Sub Workbook\_BeforePrint(Cancel As Boolean)
 Cells(2, 3).Value = Cells(2, 3).Value + 1
End Sub 'Workbook\_BeforePrint

Das ist schon alles. Um das ein bissl zu demonstrieren, habe ich mal noch ein paar Zeilen drumherum gestrickt:

Private Sub Workbook\_BeforePrint\_(Cancel As Boolean)
Dim Meldung As String
Dim Counter As Integer
Const x As Byte = 2
Const y As Byte = 2
 
 Cells(y + 0, x).Value = "Gedruckt:"
 Cells(y + 1, x).Value = "Abgebrochen:"

 Meldung = "Soll das Arbeitsblatt """ & ActiveSheet.Name & """ wirklich gedruckt werden?"
 If (MsgBox(Meldung, vbYesNo, "Sicherheitsabfrage") = vbYes) Then
 Cancel = False
 Counter = Cells(y + 0, x + 1).Value
 Cells(y + 0, x + 1).Value = Counter + 1
 Else
 Cancel = True
 Counter = Cells(y + 1, x + 1).Value
 Cells(y + 1, x + 1).Value = Counter + 1
 End If 'MsgBox

 Cancel = True 'Nur zum Testen, damit nicht immer gleich gedruckt wird.
End Sub 'Workbook\_BeforePrint

Das sollte eine Lösung sein. Leider eben nur mit Makro - das heisst, dass es nicht funktioniert, wenn man diese beim Öffnen der Datei deaktiviert.

Viele Grüße aus Köln,
Kristian

Vielen Dank :smile:
Vielen vielen Dank für eure Hilfe!

Die Lösung von Hawky hab ich heute mal ausprobiert, allerdings bekam ich ne Fehlermeldung „Objekt erforderlich“.
Da ich vorher noch nicht mit Makros gearbeitet habe und auch kein VB programmieren kann, bekam ich den Fehler leider nicht weg.
Morgen werd ich dann Kristians Lösung mal ausprobieren!

Grüße, Kerstin :smile:

Die Mischung macht´s
Mir ist gerade aufgefallen, dass ich vergessen hatte, die Lösung von Hawky mit ins Spiel zu bringen. Die ist nämlich unter Umständen viel eleganter, weil man den Counter nicht irgendwo in eine Tabelle schreiben muss, sondern dezent und sicher in die Dokument-Eigenschaften schreibt.

Statt

Private Sub Workbook\_BeforePrint(Cancel As Boolean)
 Cells(2, 3).Value = Cells(2, 3).Value + 1
End Sub 'Workbook\_BeforePrint

(was zum Demonstrieren geeigneter war) kann man also genauso gut

Private Sub Workbook\_BeforePrint(Cancel As Boolean)
 ActiveWorkbook.CustomDocumentProperties("Dokumentnummer") = \_
 ActiveWorkbook.CustomDocumentProperties("Dokumentnummer") + 1
End Sub 'Workbook\_BeforePrint

schreiben. Eine schöne Sache, die ich noch gar nicht kannte :smile:

Und eines hatte ich noch vergessen: Diese Prozedur muss natürlich, wie der Name schon sagt, im VBA-Blatt für die Arbeitsmappe stehen, nicht in dem von einer Tabelle oder in einem Modul.
Was es sonst noch für Ereignis-Handler gibt, sieht man, wenn man im VBA-Editor die Auswahlboxen über dem Quelltext ausprobiert. Dazu links von „(Allgemein)“ z.B. auf „Workbook“ umstellen und dann rechts den Handler auswählen.

Kristian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!
Also das Makro funktioniert. Ich habs mit folgendem gemacht:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cells(2, 3).Value = Cells(2, 3).Value + 1
End Sub 'Workbook_BeforePrint

Allerdings muß ich die Tabelle jetzt in Word einfügen. Und in Word zählt er vor dem Drucken die Zahl nicht hoch!! Alle anderen Makros laufen!
Habt ihr ne Idee??

Grüße, Kerstin :smile:

Ich krieg´s nicht hin.
Moin Kerstin,

zwar habe ich es geschafft, den Wert in dem Excel-Blatt
zu editieren (probieren geht über studieren), aber nun,
da ich das „nur noch schnell fertig machen“ wollte, muss
ich leider feststellen, dass es bei Word offenbar keinen
Druck-Handler gibt, so wie bei Excel. Dort heisst er ja
„'Workbook_BeforePrint()“.

Wenn also das Druck-Ereignis bei Word nicht abgefangen
werden kann, nützen die folgenden Zeilen recht wenig:

Sub VorDemDrucken()
Dim T As Object
 With ActiveDocument.InlineShapes(1).OLEFormat
 .ActivateAs "Excel.Sheet"
 .Activate
 Set T = .Object.Sheets("Tabelle1")
 T.Cells(2, 3).Value = T.Cells(2, 3).Value + 1
 Set T = Nothing
 End With
End Sub

Kristian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]