Home VBA Makro Beispiele Sonstige Codes VBA - fortlaufende Rechnungsnummer
VBA - fortlaufende Rechnungsnummer PDF Drucken E-Mail
Geschrieben von: Marcus Rose   
Freitag, 17. Juli 2009 um 09:37 Uhr

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

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

Zuletzt aktualisiert am Samstag, 18. Juli 2009 um 08:17 Uhr
 
Copyright © 2010 ms-excel.eu. Alle Rechte vorbehalten.
 

Autoren - Login

Werbung

wichtige Links:
http://ms-excel.eu
Hier habt Ihr eine gute Excel Hilfe
Besucherstatistik
Besucher gesamt: 452.131
Besucher heute: 549
Besucher gestern: 571
Max. Besucher pro Tag: 1.517
gerade online: 13
max. online: 38
counter Statistiken