|
An dieser Stelle möchte ich euch einmal zeigen wie man eine fortlaufende Rechnungsnummer, oder Auftragsnummer, mit Hilfe von Excel VBA in sein Tabellenblatt einfügen kann. Wie ihr Euch denken könnt gibt es wieder einmal verschiedene Möglichkeiten. Die einfachste Möglichkeit eine fortlaufende Rechnungsnummer zu erzeugen ist eine Nummer in ein Tabellenblatt einzufügen. Diese wird mit betätigen eines Schalters eingelesen - mit 1 aufaddiert - und wieder in die dafür vorgesehende Zelle zurück geschrieben. Ein VBA Code für diese einfache Variante würde so aussehen: Sub Rechnungsnummer() Range("A1") = Range("A1") + 1 End Sub
Diese Variante hat für mich aber einen bitteren Beigeschmack. Der Grund ist, dass man mal eben hergehen könnte und einen Wert in Zelle A1 schreiben, welcher bereits existiert. Ich denke dass man von daher doch lieber alternative Möglichkeiten aufgreifen sollte. Aus diesem Grund habe ich mir heute überlegt: Warum sollten wir nicht einfach die Dokumenteigenschaften zum Ablegen der aktuellen Rechnungsnummer nutzen? Diese Dokumenteigenschaften werden eh nicht unbedingt genutzt. Und viele Anwender nutzen sie gar nicht. Viel mehr ist auch hier nicht zu programmieren. Schaut euch einmal diesen VBA Code an: Sub Rechnungsnummer() Dim RechNr As Long RechNr = ActiveWorkbook.BuiltinDocumentProperties(5) RechNr = RechNr + 1 ActiveWorkbook.BuiltinDocumentProperties(5) = RechNr Range("A1") = RechNr End Sub
Diesen VBA Code habe ich noch etwas weiter ausgebaut, denn ich möchte eigentlich, dass die Rechnungsnummer jedes Jahr wieder bei 1 anfängt. Das geht aber nur wenn ich jedes Jahr auch die Jahreszahl mit anhänge: Sub Rechnungsnummer() Dim RechNr As Long Dim Jahr As Integer Jahr = ActiveWorkbook.BuiltinDocumentProperties(6) RechNr = ActiveWorkbook.BuiltinDocumentProperties(5) If Jahr <> Year(Date) Then RechNr = 0 Jahr = Year(Date) ActiveWorkbook.BuiltinDocumentProperties(6) = Jahr End If RechNr = RechNr + 1 ActiveWorkbook.BuiltinDocumentProperties(5) = RechNr Range("A1") = Format(RechNr, "00000") & "/" & Jahr End Sub
Meiner Meinung nach fehlt nun aber immer noch eine Kleinigkeit. Ich bin der Auffassung, dass sich die Rechnungsnummer erst erhöhen darf, wenn die Rechnung auch ausgedruckt wurde. Um dieses Vorhaben zu realisieren legen wir den folgenden Code hinter diese Arbeitsmappe : Option Explicit
Public Druck As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean) If Druck = False Then Cancel = True MsgBox "Drucken ist nur über den vorgesehenen Button Möglich!" Else Druck = False End If End Sub
Dieses Makro bewirkt, dass wir nicht mehr über den Drucken - Schalter aus der Symbolleiste drucken können. Wir drucken somit nur noch über einen Schalter, den wir uns selber angelegt haben. Hinter unser Tabellenblatt kommt nun dieser leicht abgewandelte Code: Option Explicit
Sub Rechnungsnummer() Dim RechNr As Long Dim Jahr As Integer Jahr = ActiveWorkbook.BuiltinDocumentProperties(6) RechNr = ActiveWorkbook.BuiltinDocumentProperties(5) If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub If Jahr <> Year(Date) Then RechNr = 0 Jahr = Year(Date) ActiveWorkbook.BuiltinDocumentProperties(6) = Jahr End If RechNr = RechNr + 1 ActiveWorkbook.BuiltinDocumentProperties(5) = RechNr Range("A5") = Format(RechNr, "00000") & "/" & Jahr End Sub
Nun wird die Rechnungsnummer nur noch hochgezählt, wenn auch die Rechnung ausgedruckt wurde. Nutzen wir im Druckermenü den Schalter Abbrechen, so wird das Makro sofort abgebrochen, so dass sich die Rechnungsnummer nicht verändert.
Download file:Beispieldatei fortlaufende Rechnungsnummer Information Filename: rechnr.xls Filesize: 29184 Kb
Hinweis: Es ist nicht unbedingt nötig, dass wir die Rechnungsnummer in den Dokumenteigenschaften ablegen. Alternativ könnten wir diese auch in einem versteckten (ausgeblendeten) Tabellenblatt unterbringen. Das ist mit ganz kleinen Veränderungen am Code zu bewerkstelligen: Sub Rechnungsnummer() Dim RechNr As Long Dim Jahr As Integer Jahr = Worksheets("Versteckt").Range("A1") RechNr = Worksheets("Versteckt").Range("B1") If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub If Jahr <> Year(Date) Then RechNr = 0 Jahr = Year(Date) Worksheets("Versteckt").Range("A1") = Jahr End If RechNr = RechNr + 1 Worksheets("Versteckt").Range("B1") = RechNr Range("A5") = Format(RechNr, "00000") & "/" & Jahr End Sub
|