Word Rechnungsnummer soll automatisch weiterzählen?
Hallo,
ich habe folgendes Problem und bitte um Hilfe. Ich habe eine Rechnung in Word mit der Rechnungsnummer 012-2018. Nun möchte ich, wenn ich das Wod-Dokument neu öffne, dass die Rechnungsnummer automatisch weiter zählt.
In meinem Beispiel 013-2018. Wie bekomme ich das Problem gelöst.
Gruß
4 Antworten
Hallo,
hier ein Makro, das die Rechnungsnummer in Word durchzählt. Ich habe es von dieser Seite, allerdings habe ich das dortige Makro ein wenig umgeschrieben und das Format der Rechnungsnummer entsprechend angepasst.
Alles, was du tun musst, sind folgende Schritte:
1. Makro in deine Rechnungsvorlage kopieren- Öffne deine Rechnungsvorlage (eine Microsoft Word-Vorlage mit Makros) und rufe dort die Visual-Basic-Ansicht auf.
- Wechsle in dieser im VB-Editor im Projektfenster in den Ordner Microsoft Word Objekte DER RECHNUNGSVORLAGE (nicht der Normalvorlage). Dort findest du ThisDocument, auf das du doppelt klickst, um dorthin zu wechseln.
- Kopiere den kompletten Code unten in diesen Container.
- Außerdem solltest du im Windows-Explorer einen entsprechenden Ordner anlegen, in dem alle deine Rechnungen gespeichert werden, und auf den dein Ablagepfad dann verweist.
- In der Codezeile '### Hier den passenden Ablagepfad einsetzen:, die zweimal vorhanden ist (einmal in der Function nextFilename und einmal in der Function RgNr), musst du in der Zeile sAblage = "D:\Temp\" deinen Ablagepfad für deine Rechnungen entsprechend ändern.
- Erstelle an der Stelle, an der deine Rechnungsnummer im Dokument eingefügt werden soll, in deiner Rechnungsvorlage eine Textmarke mit dem Namen Nr (bitte unbedingt genau diesen Namen verwenden, keinen anderen, da das Makro damit arbeitet und sonst nicht weiß, wo es die Rechnungsnummer einfügen soll).
- Speichere deine Vorlage ab.
Abschließend musst du noch 12 Worddokumente mit den Namen 001-2018 bis 012-2018 in deinem Ablageordner anlegen, damit Word bei der nächsten Rechnung wie gewünscht den Namen bzw. die Rechnungsnummer 013-2018 verwendet.
Wie das Makro arbeitet- Das Makro erstellt dir auf Grundlage deiner Vorlage eine Rechnung mit neuer Rechnungsnummer und speichert diese sofort im Ablageordner ab. Jahreswechsel sollte es selbstständig mitkriegen und dann bei der Rechnungsnummer von vorne zu zählen beginnen.
- Beim Öffnen eines neuen Dokuments bekommst du eine Meldung mit Rechnungsnummer und Dateiname, die du nur bestätigen brauchst.
- Wenn du eine unbenutzte Rechnungsnummer aus Versehen vergeben hast, lösche einfach das entsprechende Rechnungsdokument im Ablageordner, dann wird die Nummer wieder vergeben.
Wenn du noch Fragen hast, melde dich bitte.
Gruß, BerchGerch
Hier der Code:
Function nextFilename() As String
'Ermittelt den nächsten freien Dateinamen für ein Rechnungsdokument
Dim sAblage As String, sVorgabe As String, sDocExt As String, sIstDa As String
Dim c As Integer
Dim Mnt As String
Dim RgNr As String
Mnt = Format(Now(), "mm")
'### Hier den passenden Ablagepfad einsetzen:
sAblage = "D:\Temp\"
'auf abschließenden Backslash überprüfen
If Right(sAblage, 1) <> "\" Then sAblage = sAblage & "\"
'Dateinamen mit Jahr vorbelegen
sVorgabe = "-" & Year(Now)
'Dateiextender bestimmen
sDocExt = IIf(Val(Application.Version) > 11, ".docx", ".doc")
'ersten freien Dateinamen ermitteln
c = 1
sIstDa = Dir(sAblage & Format(c, "000") & sVorgabe & sDocExt)
While sIstDa <> ""
c = c + 1
sIstDa = Dir(sAblage & Format(c, "000") & sVorgabe & sDocExt)
Wend
'Fullname als Ergebnis zurückgeben
nextFilename = sAblage & Format(c, "000") & sVorgabe & sDocExt
End Function
Function RgNr() As String
'Ermittelt die Rechnungsnummer
Dim sAblage As String, sVorgabe As String, sDocExt As String, sIstDa As String
Dim c As Integer
Dim Mnt As String
Mnt = Format(Now(), "mm")
'### Hier den passenden Ablagepfad einsetzen:
sAblage = "D:\Temp\"
'Auf abschließenden Backslash überprüfen
If Right(sAblage, 1) <> "\" Then sAblage = sAblage & "\"
'### Hier das Format der RgNr. bestimmen
sVorgabe = "-" & Year(Now)
'Dateiextender bestimmen
sDocExt = IIf(Val(Application.Version) > 11, ".docx", ".doc")
'Ersten freien Dateinamen ermitteln
c = 1
sIstDa = Dir(sAblage & Format(c, "000") & sVorgabe & sDocExt)
While sIstDa <> ""
c = c + 1
sIstDa = Dir(sAblage & Format(c, "000") & sVorgabe & sDocExt)
Wend
'RgNr als Ergebnis zurückgeben
RgNr = Format(c, "000") & sVorgabe 'Hier das Format der Nr bestimmen
End Function
Sub Document_New()
'Beim Öffnen eines neuen Dokuments auf Basis der Vorlage neues Rechnungsdokument anlegen und Rechnungsnummer einfügen
Dim rechnungsnummer As String
Dim dateiname As String
Dim pos As Integer
Dim Invoice As String
dateiname = nextFilename
pos = InStrRev(dateiname, "\")
rechnungsnummer = Right(dateiname, Len(dateiname) - InStrRev(dateiname, "\"))
Invoice = RgNr
'Kontrollmeldung
MsgBox "Dateipfad und -name: " & vbLf & vbLf & dateiname & vbLf & vbLf & _
"Rechnungsnummer: " & vbTab & vbTab & Invoice
With ActiveDocument
'Rechnungsnummer in Textmarke anlegen
.Bookmarks("Nr").Range.Text = Invoice
'Dokument unter dem erzeugten Dateinamen speichern
.SaveAs dateiname
End With
End Sub
Hallo,
mir erschließt sich nicht ganz, was das 1013 in deiner Rechnungsnummer sein soll. 2019 ist das Jahr, schon klar, aber soll 1013 einfach nur eine vierstellige fortlaufende Rechnungsnummer sein, oder wie stellst du dir das genau vor?
Gruß, BerchGerch
Ja, 1013 soll meine Rechnungsnummer sein. Ich will nicht mit 1 beginnen, sondern mit 1000.
Viele Grüße Sudje
Hallo,
ich habe dir den auf deine Wünsche angepassten Code in einer neuen Antwort geschrieben.
Gruß, BerchGerch
Hallo Sudje,
hier der neue Code, der an deine Wünsche angepasst wurde:
Option Explicit
Function nextFilename() As String
'Ermittelt den nächsten freien Dateinamen für ein Rechnungsdokument
Dim sAblage As String, sVorgabe As String, sDocExt As String, sIstDa As String
Dim c As Integer
Dim Mnt As String
Dim RgNr As String
Mnt = Format(Now(), "mm")
'### Hier den passenden Ablagepfad einsetzen:
sAblage = "D:\Temp\"
'auf abschließenden Backslash überprüfen
If Right(sAblage, 1) <> "\" Then sAblage = sAblage & "\"
'Dateinamen mit Jahr vorbelegen
sVorgabe = Year(Now) & "-"
'Dateiextender bestimmen
sDocExt = IIf(Val(Application.Version) > 11, ".docx", ".doc")
'ersten freien Dateinamen ermitteln
c = 1000
sIstDa = Dir(sAblage & sVorgabe & Format(c, "0000") & sDocExt)
While sIstDa <> ""
c = c + 1
sIstDa = Dir(sAblage & sVorgabe & Format(c, "0000") & sDocExt)
Wend
'Fullname als Ergebnis zurückgeben
nextFilename = sAblage & sVorgabe & Format(c, "0000") & sDocExt
End Function
Function RgNr() As String
'Ermittelt die Rechnungsnummer
Dim sAblage As String, sVorgabe As String, sDocExt As String, sIstDa As String
Dim c As Integer
Dim Mnt As String
Mnt = Format(Now(), "mm")
'### Hier den passenden Ablagepfad einsetzen:
sAblage = "D:\Temp\"
'Auf abschließenden Backslash überprüfen
If Right(sAblage, 1) <> "\" Then sAblage = sAblage & "\"
'### Hier das Format der RgNr. bestimmen
sVorgabe = Year(Now) & "-"
'Dateiextender bestimmen
sDocExt = IIf(Val(Application.Version) > 11, ".docx", ".doc")
'Ersten freien Dateinamen ermitteln
c = 1000
sIstDa = Dir(sAblage & sVorgabe & Format(c, "0000") & sDocExt)
While sIstDa <> ""
c = c + 1
sIstDa = Dir(sAblage & sVorgabe & Format(c, "0000") & sDocExt)
Wend
'RgNr als Ergebnis zurückgeben
RgNr = sVorgabe & Format(c, "0000") 'Hier das Format der Nr bestimmen
End Function
Sub Document_New()
'Beim Öffnen eines neuen Dokuments auf Basis der Vorlage neues Rechnungsdokument anlegen und Rechnungsnummer einfügen
Dim rechnungsnummer As String
Dim dateiname As String
Dim pos As Integer
Dim Invoice As String
dateiname = nextFilename
pos = InStrRev(dateiname, "\")
rechnungsnummer = Right(dateiname, Len(dateiname) - InStrRev(dateiname, "\"))
Invoice = RgNr
'Kontrollmeldung
MsgBox "Dateipfad und -name: " & vbLf & vbLf & dateiname & vbLf & vbLf & _
"Rechnungsnummer: " & vbTab & vbTab & Invoice
With ActiveDocument
'Rechnungsnummer in Textmarke anlegen
.Bookmarks("Nr").Range.Text = Invoice
'Dokument unter dem erzeugten Dateinamen speichern
.SaveAs dateiname
End With
End Sub
Ich habe alle Änderungen so vorgenommen, wie von dir gewünscht: Der erste generierte Dateiname wird jetzt 2019-1000 sein. Ansonsten musst du alles so machen, wie in meiner anderen Antwort beschrieben.
Bei Fragen oder Unklarheiten einfach melden!
Gruß, BerchGerch
Ich mache so etwas mit der Feldfunktion Datum:
Einfügen->Schnellbaustein->Feld.
Aus der Liste "Date" auswählen. Bei jedem Öffnen sollte dass Datum natürlich den aktuellen Tag zeigen, was natürlich zu Lücken wegen der Wochenende führt.
Sollte es sich nicht aktualisieren dann mit der Kombination:
STRG+A (alles markieren)
dann F9 drücken erhälst du den heutigen Tag. Davor und/oder dahinter kannst du noch andere Zahlen anfügen.
==
Das Format kann man auch selbst noch anpassen in dem man
ALT+F9 drückt. Dann erhält man in geschweiften Klammern den Feld Code und kann noch in Eigenregie etwas ändern. z.b:
aus
{DATE \@ "yy-MM-dd" \* MERGEFORMAT}
dies
{ DATE \@ "yyMMdd" \* MERGEFORMAT }
machen
Hallo IchMalWiederXY ,
danke für deine Antwort, die Feldfunktion habe ich eingefügt. Das Datum auch in der Formatierung verändert. Nur ein verstehe ich nicht. Meine Rechnungsnr. soll so beginnen 12-2018. Wenn ich aber an einem Tag vier Rechnungen schreibe, soll er weiterzählen, 13-2018; 14-2018, 15-2018. Aber an ein und dem selben Tag zählt er doch nicht weiter. Stehe ich auf dem Schlauch, was mache ich falsch:
OK. Dann wird diese Lösung nix. Dann sind wir wieder beim "Makro", aber auch dies würde irgendein Ereignis benötigen, welches als "hochzählen" interpretiert werden kann. Rechnung ausdrucken (oder speichern) könnte so ein Ereignis sein. Allerdings, sollte mal an der Rechnung noch eine Korrektur vorgenommen werden müssen, oder sie noch ein weiteres mal ausgedruckt (versendet) werden müssen, dürfte nicht hochgezählt werden. Du siehst, dies kann beliebig komplex werden. Am besten wird man daher am Start gefragt "Neue Rechnung erstellen", dann könnte man die Vorlage laden, die dann auf jeden Fall eine neue Nummer erhält. WENN man sich irgendwo gemerkt hat welche Nummern bereits vergeben wurden. Vielleicht gibt es noch eine zweite (dritte) Person die Rechnungen schreibt, dort muss schließlich auch bekannt sein, was die anderen bereits vergeben haben. Deshalb gibt es Buchhaltungssoftware mit Datenbank und "Multiplatz" Möglichkeiten. Selbst machen ist aufwendig.
Moin,
danke an BerchGerch für deine Mühe den Code umzuschreiben und hier einzustellen!
Ich benötige zu diesem Thema Hilfe und bin was das Programmieren angeht ziemlich talentfrei.
Ich habe den oben stehenden Code verwendet und würde gerne im Dateinamen noch zusätzlich zur Rechnungsnummer, den Nachnamen der Person haben, die ich anschreibe. Für die Empfängerauswahl habe ich eine Funktion ausgewählt, die die Kontaktdaten aus Outlook zieht.
Ich hoffe ihr könnt mir helfen, wie ich den verwendeten Code umschreiben kann, dass es funktioniert.
vielen Dank und beste Grüße
Niklas
Hallo,
ich habe dein Problem gesehen, habe aber momentan wenig bis gar keine Zeit, um mich bei GF blicken zu lassen. Aber wenn ich demnächst mal Zeit haben sollte, stell ich dir einen möglichen Lösungsansatz ein.
Gruß, BerchGerch
Hallo BerchGerch,
kein Thema. Das wäre richtig klasse mit dem Lösungsansatz!
danke und viele Grüße
Hallo,
Guter Ansatz, leider habe ich nicht voel Programmiererfahrung. Ich würde den Dateinamen doch lieber wie folgt haben: 2019-1013. Wo muss ich da alles Anpassungen machen? Für Hilfe wäre ich sehr dankbar.
Viele Grüße
Sudje