Automatische Vergabe einer Rechnungsnummer in Word2010
Moin,
habe folgende Frage:
ich versuche eine Rechnungsvorlage zu erstellen, in der automatisch neue Rechnungsnummern vergeben werden.
Habe hier
http://www.pcwelt.de/tipps/Word-97-2000-XP-Dokumente-mit-laufender-Numm ...
den doccounter gefunden, bei dem das in der mitgelieferten Vorlage Rechnung.dot funktioniert.
Das Problem:
Wenn ich die vorhandene Rechnung.dot entsprechend anpassen will und sei es nur der Anfang, dass ich das Textfeld mit Rechnungsnummer und Datum auflöse, weil ich Rechnungsnummer allein in der Betreffzeile will, ohne Rahmen usw., und die Vorlage speichere, funktioniert es nicht mehr.
Also, ich kopiere Rechnungsnummer aus dem Textfeld und kopiere es in die Betreffzeile, speichere und öffne aus der Vorlage ein neues Dokument. Es wird nicht mehr automatisch die fortlaufende Rechnungsnummer generiert. Woran liegt das?
Wenn ich eine komplett neue Vorlage erstellen will, funktioniert es auch nicht. Wenn ich ein neues Dokument erstelle und das Doccounter-Add-in aktiviere, bzw. den Haken setze, und als Vorlage speichere, passiert gar nicht. Auf der Downloadseite seht auch kein How-To, wie manmit dem doccounter eine neue Vorlage erstellt.
Vielleicht könnte Ihr mir ja nen Tip geben, vor allem wie das beim erstellen einer eneuen Vorlage funktioniert.
Freu mich auf eure Tips.
Greetz
de Bätmän
habe folgende Frage:
ich versuche eine Rechnungsvorlage zu erstellen, in der automatisch neue Rechnungsnummern vergeben werden.
Habe hier
http://www.pcwelt.de/tipps/Word-97-2000-XP-Dokumente-mit-laufender-Numm ...
den doccounter gefunden, bei dem das in der mitgelieferten Vorlage Rechnung.dot funktioniert.
Das Problem:
Wenn ich die vorhandene Rechnung.dot entsprechend anpassen will und sei es nur der Anfang, dass ich das Textfeld mit Rechnungsnummer und Datum auflöse, weil ich Rechnungsnummer allein in der Betreffzeile will, ohne Rahmen usw., und die Vorlage speichere, funktioniert es nicht mehr.
Also, ich kopiere Rechnungsnummer aus dem Textfeld und kopiere es in die Betreffzeile, speichere und öffne aus der Vorlage ein neues Dokument. Es wird nicht mehr automatisch die fortlaufende Rechnungsnummer generiert. Woran liegt das?
Wenn ich eine komplett neue Vorlage erstellen will, funktioniert es auch nicht. Wenn ich ein neues Dokument erstelle und das Doccounter-Add-in aktiviere, bzw. den Haken setze, und als Vorlage speichere, passiert gar nicht. Auf der Downloadseite seht auch kein How-To, wie manmit dem doccounter eine neue Vorlage erstellt.
Vielleicht könnte Ihr mir ja nen Tip geben, vor allem wie das beim erstellen einer eneuen Vorlage funktioniert.
Freu mich auf eure Tips.
Greetz
de Bätmän
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188772
Url: https://administrator.de/forum/automatische-vergabe-einer-rechnungsnummer-in-word2010-188772.html
Ausgedruckt am: 04.04.2025 um 16:04 Uhr
27 Kommentare
Neuester Kommentar

Hallo de Bätmän !
Hast Du auch die Hinweise auf Deinem Link gelesen?
Das Makro speichert den aktuellen Zählerstand in der Datei COUNTER.DAT unter "Eigene Dateien". Wenn Sie den Dateinamen oder Ablageort ändern möchten, müssen Sie den Wert der Variablen "CounterFilePath" und "CounterFile" im Makro ändern.
Gruß Dieter
Hast Du auch die Hinweise auf Deinem Link gelesen?
Das Makro speichert den aktuellen Zählerstand in der Datei COUNTER.DAT unter "Eigene Dateien". Wenn Sie den Dateinamen oder Ablageort ändern möchten, müssen Sie den Wert der Variablen "CounterFilePath" und "CounterFile" im Makro ändern.
Gruß Dieter

Hallo ischbindebaetmaen!
Also, ich habe mir mal den Code so im groben angesehen und muss feststellen, dass das Ganze ziemlich umständlich von statten geht, aber destotrotz, musst Du für die Position, an der Du es haben möchtest, eine Textmarke mit dem Namen 'ReNr' setzen (Einfügen>Textmarke).
Gruß Dieter
Wenn ich die vorhandene Rechnung.dot entsprechend anpassen will und sei es nur der Anfang, dass ich das Textfeld mit Rechnungsnummer und Datum auflöse, weil ich Rechnungsnummer allein in der Betreffzeile will, ohne Rahmen usw., und die Vorlage speichere, funktioniert es nicht mehr.
Also, ich habe mir mal den Code so im groben angesehen und muss feststellen, dass das Ganze ziemlich umständlich von statten geht, aber destotrotz, musst Du für die Position, an der Du es haben möchtest, eine Textmarke mit dem Namen 'ReNr' setzen (Einfügen>Textmarke).
Gruß Dieter

Hallo de Bätmän!
Ja, ohne die Textmarke, weiß der Code ja nicht wohin mit der Nr.
Und alternative Ideen habe ich schon, aber mit der Zeit habert's ein wenig. Wollte schon vor 2 Stunden anfangen zu bügeln
Gruß Dieter
Heisst, der Counter funktioniert NUR mit Textmarke? Wenn Du sagst, dass es ziemlich umständlich ist, kennst du evtl. eine alternative Möglichkeit?
Ja, ohne die Textmarke, weiß der Code ja nicht wohin mit der Nr.
Und alternative Ideen habe ich schon, aber mit der Zeit habert's ein wenig. Wollte schon vor 2 Stunden anfangen zu bügeln
Gruß Dieter

Hallo
Die Rechnungs.dot enthält auch Code, insofern musst die Datei schon kopieren

Aber hier im Forum findest Du anversich jede Menge Lesestoff!
Gruß Dieter
Also, wenn ich jetzt in der urspürnglichen Rechnung.dot, gemäss Deinem Tip, eine Textmarke "ReNr" einsetze, geht es, wenn ich aber in einem neuen leeren Worddokument diese Textmarke setzte, dann funktioniert es nicht.
Die Rechnungs.dot enthält auch Code, insofern musst die Datei schon kopieren
Da Du Dich mit dem Thema VBA und Makros ja offensichtlich gut auskennst, hast Du doch sicher nen Tip für Online-Lektüre, anhand der man schnell lernen kann? Dann kannst Du auch in Ruhe bügeln
Da muss ich leider passen, mit Lektüren hab ich's nicht so. Bin ziemlich lesefaulAber hier im Forum findest Du anversich jede Menge Lesestoff!
Gruß Dieter

Hallo de Bätmän!
Hier mal eine Counter-Vorlage ohne AddIn und externer Counter-Datei.
Bei dieser Vorlage (Rechnung.dot), wird der aktuelle Zähler für die Rechnungs-Nr. in der Regristry gesichert und abgerufen.
Die CommandBar enthält ein Editier-Feld mit der aktuellen Rechnungsnummer und kann bei Bedarf über dieses Editier-Feld geändert werden, wobei die Eingabe mit Return abgeschlossen wird. Bei einer Änderung, wird der Anzeige-Wert auch in die Rechnungs-Vorlage übernommen.
Im Vorlage-Document muss unter 'Einfügen>Textmarke' eine Textmarke mit dem Namen 'ReNr' an der Stelle eingefügt werden, wo die Rechnungsnummer hin soll.
Noch ein wichtiger Hinweis:
Wenn in der Rechnungs-Vorlage Änderungen vorgenommen werden, dann müssen die Makro's beim Öffnen der Vorlage deaktiviert sein, ansonsten wird die Vorlage nicht gespeichert.
Die Funktion wurde in einer etwas älteren Word-Version getestet und ich habe keine Ahnung, ob diese Vorlage auch in neueren Versionen funktioniert?
Es folgen nun 3 Quellcodes, die in der Datei 'Rechnung.dot' im VB-Editor in 'TemplateProject(Rechnung) wie folgt eingefügt werden müssen:
Dieser Code wird in 'ThisDocument' eingefügt:
Dieser Code wird in ein Modul mit Namen 'Counter' eingefügt:
Und dieser Code wird in ein Klassenmodul mit Namen 'EventClassModule' eingefügt:
Viel Spaß beim Testen!
Gruß Dieter
Hier mal eine Counter-Vorlage ohne AddIn und externer Counter-Datei.
Bei dieser Vorlage (Rechnung.dot), wird der aktuelle Zähler für die Rechnungs-Nr. in der Regristry gesichert und abgerufen.
Die CommandBar enthält ein Editier-Feld mit der aktuellen Rechnungsnummer und kann bei Bedarf über dieses Editier-Feld geändert werden, wobei die Eingabe mit Return abgeschlossen wird. Bei einer Änderung, wird der Anzeige-Wert auch in die Rechnungs-Vorlage übernommen.
Im Vorlage-Document muss unter 'Einfügen>Textmarke' eine Textmarke mit dem Namen 'ReNr' an der Stelle eingefügt werden, wo die Rechnungsnummer hin soll.
Noch ein wichtiger Hinweis:
Wenn in der Rechnungs-Vorlage Änderungen vorgenommen werden, dann müssen die Makro's beim Öffnen der Vorlage deaktiviert sein, ansonsten wird die Vorlage nicht gespeichert.
Die Funktion wurde in einer etwas älteren Word-Version getestet und ich habe keine Ahnung, ob diese Vorlage auch in neueren Versionen funktioniert?
Es folgen nun 3 Quellcodes, die in der Datei 'Rechnung.dot' im VB-Editor in 'TemplateProject(Rechnung) wie folgt eingefügt werden müssen:
Dieser Code wird in 'ThisDocument' eingefügt:
Option Explicit
Private RegistryEventHandler As New EventClassModule 'Word-Ereignisse in Klassenmodul aktivieren
Private Sub Document_New()
Set oNewDoc = ActiveDocument
Set RegistryEventHandler.AppWord = Word.Application
Call InitCounter
End Sub
Option Explicit
'Registry-Path HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Word Rechnung\Settings\Counter
Public Const RegAppName = "Word Rechnung"
Public Const RegSecName = "Settings"
Public Const RegKeySave = "Counter"
Public oNewDoc As Document, iCounter As Long
Public Sub InitCounter()
iCounter = GetSetting(RegAppName, RegSecName, RegKeySave, 1)
Call CreateCommandBar
Call InitBookmarkReNr
End Sub
Private Sub CreateCommandBar()
With CommandBars.Add(Name:="Rechn.-Nr.", Temporary:=True)
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonCaption
.Caption = "Counter:"
End With
With .Controls.Add(Type:=msoControlEdit)
.Text = iCounter
.Width = 60
.TooltipText = "Aktuelle Rechnungs-Nr. anzeigen (Änderung mit Return übernehmen)"
.OnAction = "ButtonEdit_Click"
End With
.Visible = True
End With
End Sub
Public Sub ButtonEdit_Click()
Dim Value As Variant
Value = CommandBars("Rechn.-Nr.").Controls(2).Text
If IsNumeric(Value) Then
iCounter = Value
Call SaveSetting(RegAppName, RegSecName, RegKeySave, iCounter)
Call InitBookmarkReNr
Else
MsgBox "Bitte nur numerische Werte eingeben!", vbExclamation, "Fehler..."
End If
End Sub
Private Sub InitBookmarkReNr()
If ActiveDocument.Bookmarks.Exists("ReNr") Then
With ActiveDocument.Bookmarks("ReNr").Range.Words(1)
If .Characters(1) > " " Then .Delete
.InsertBefore iCounter
End With
Else
MsgBox "Die Textmarke 'ReNr' nicht gefunden!", vbExclamation, "Fehler..."
End If
End Sub
Option Explicit
'Rechnungsname bei Bedarf anpassen (%y=YYYY, %m=MM, %d=DD, %i=ReNr)
Private Const sDocName = "Rechnung %y-%m-%d#%i" 'Beispiel: "Rechnung 2012-08-03#12"
Public WithEvents AppWord As Word.Application
Private Sub AppWord_DocumentBeforeSave(ByVal Doc As Document, ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean)
Dim Template As Object
For Each Template In Templates
If LCase(Template.Name) = "rechnung.dot" Then Template.Saved = True
Next
If SaveAsUI And Doc.Name = oNewDoc.Name Then
With Dialogs(wdDialogFileSaveAs)
.Name = GetDocName
If .Show Then Call SaveSetting(RegAppName, RegSecName, RegKeySave, iCounter + 1)
End With
Cancel = True: SaveAsUI = False
End If
End Sub
Private Sub AppWord_DocumentBeforeClose(ByVal Doc As Document, ByRef Cancel As Boolean)
Dim Template As Object
For Each Template In Templates
If LCase(Template.Name) = "rechnung.dot" Then Template.Saved = True
Next
End Sub
Private Function GetDocName() As String
Dim aReplace As Variant, i As Integer
GetDocName = sDocName
aReplace = Array("%y", Year(Date), "%m", Right("0" & Month(Date), 2), "%d", Right("0" & Day(Date), 2), "%i", iCounter)
For i = 0 To UBound(aReplace) Step 2
GetDocName = Replace(GetDocName, aReplace(i), aReplace(i + 1))
Next
End Function
Viel Spaß beim Testen!
Gruß Dieter

Hallo Bätmän!
Also, Du hast deine bisherige 'Rechnung.dot' kopiert und barbeitest jetzt 'Rechnung_Kopie.dot'.
So wird es im Endeffekt aber nicht funktionieren, weil meine Vorlage 'Rechnung.dot' heißen muss (ansonsten siehe weiter unten). Daher schlage ich vor, dass Du Deine bisherige 'Rechnung.dot' erst einmal umbenennst z.B. in 'PC-Welt Rechnung.dot' und dann kopierst und die Kopie in 'Rechnung.dot' umbenennst. Und da das AddIn 'DocCounter auch nicht benötigt wird, benennst Du dieses am besten ebenfalls um.
Anschließend öffnest Du die neue 'Rechnung.dot' mit deaktivierten Makro's und löschst im VB-Editor das Modul mit dem alten PC-Welt-Code.
Danach fügst Du ein neues Modul und Klassenmodul ein und benennst diese folgendermaßen um:
Im VB-Editor über Menu>Ansicht>Eigenschaftsfenster (oder F4-Taste) das Eigenschaftsfenster öffnen und so verschieben, dass im Project-Explorer das Modul1 und Klasse1 sichtbar sind, dann ein Klick auf Modul1 und im Eigenschaftsfenster '(Name) Modul1' das Modul1 einfach
umbenennen. Anschließend das Klassenmodul auf die gleiche Art und Weise umbenennen.
Nachdem Du dann die 3 Quellcodes in das TemplateProject(Rechnung) an ihrem Bestimmungsort (ThisDocument, Module Counter, Klassenmodule EventClassModule) eingefügt hast, compilerst Du den VBA-Code über Menü>Debugger>Kompilern von TemplateProject. Und sofern keine Fehlermeldung erfolgt, speicherst Du die Vorlage und öffnest sie anschließend mit aktivierten Makro's. Nach dem erneuten Öffnen solltest Du eine CommandBar sehen und sofern die Textmarke ReNr existiert, sollte an der entsprechenden Position die Rechnungsnummer 1 stehen. Wenn Du nun die Rechnungsnummer im Editierfeld der CommandBar nach Belieben änderst, wird an der Textmarke ebenfalls die neue Rechnungsnummer eingetragen (sollte es zumindest?).
Wie im letzten Kommentar bereits erwähnt, muss bei einer Änderung der Vorlage, die Vorlage mit deaktivierten Makro's geöffnet werden, weil die Änderungen ansonsten nicht gespeichert werden und somit verloren gehen.
Wenn Du dir den Code im Klassenmodul ansiehst, dann fällt Dir eventuell auf, dass an zwei Stellen im Code der Name "rechnung.dot" steht. D.h. wenn Du den Namen der Vorlage ändern willst, dann müssen die Namen an diesen beiden Stellen ebenfalls (in Kleinbuchstaben) geändert werden. Der Grund dafür ist der, dass der Name der Vorlage nicht mit Bestimmtheit zu ermitteln ist. Das trifft insbesondere dann zu, wenn noch andere Vorlagen/AddIns außer der Normal.dot geöffnet sind. Wenn Du den Namen der Vorlage änderst und im Code den Namen nicht mit änderst, dann hat das zur Folge, dass Du beim Speichern einer Rechnung jedesmal gefragt wirst, ob die Änderungen auch in der Vorlage gespeichert werden sollen.
Hoffe, dass Du damit so einigermaßen klarkommst?
Gruß Dieter
Also, Du hast deine bisherige 'Rechnung.dot' kopiert und barbeitest jetzt 'Rechnung_Kopie.dot'.
So wird es im Endeffekt aber nicht funktionieren, weil meine Vorlage 'Rechnung.dot' heißen muss (ansonsten siehe weiter unten). Daher schlage ich vor, dass Du Deine bisherige 'Rechnung.dot' erst einmal umbenennst z.B. in 'PC-Welt Rechnung.dot' und dann kopierst und die Kopie in 'Rechnung.dot' umbenennst. Und da das AddIn 'DocCounter auch nicht benötigt wird, benennst Du dieses am besten ebenfalls um.
Anschließend öffnest Du die neue 'Rechnung.dot' mit deaktivierten Makro's und löschst im VB-Editor das Modul mit dem alten PC-Welt-Code.
Danach fügst Du ein neues Modul und Klassenmodul ein und benennst diese folgendermaßen um:
Im VB-Editor über Menu>Ansicht>Eigenschaftsfenster (oder F4-Taste) das Eigenschaftsfenster öffnen und so verschieben, dass im Project-Explorer das Modul1 und Klasse1 sichtbar sind, dann ein Klick auf Modul1 und im Eigenschaftsfenster '(Name) Modul1' das Modul1 einfach
umbenennen. Anschließend das Klassenmodul auf die gleiche Art und Weise umbenennen.
Nachdem Du dann die 3 Quellcodes in das TemplateProject(Rechnung) an ihrem Bestimmungsort (ThisDocument, Module Counter, Klassenmodule EventClassModule) eingefügt hast, compilerst Du den VBA-Code über Menü>Debugger>Kompilern von TemplateProject. Und sofern keine Fehlermeldung erfolgt, speicherst Du die Vorlage und öffnest sie anschließend mit aktivierten Makro's. Nach dem erneuten Öffnen solltest Du eine CommandBar sehen und sofern die Textmarke ReNr existiert, sollte an der entsprechenden Position die Rechnungsnummer 1 stehen. Wenn Du nun die Rechnungsnummer im Editierfeld der CommandBar nach Belieben änderst, wird an der Textmarke ebenfalls die neue Rechnungsnummer eingetragen (sollte es zumindest?).
Wie im letzten Kommentar bereits erwähnt, muss bei einer Änderung der Vorlage, die Vorlage mit deaktivierten Makro's geöffnet werden, weil die Änderungen ansonsten nicht gespeichert werden und somit verloren gehen.
Wenn Du dir den Code im Klassenmodul ansiehst, dann fällt Dir eventuell auf, dass an zwei Stellen im Code der Name "rechnung.dot" steht. D.h. wenn Du den Namen der Vorlage ändern willst, dann müssen die Namen an diesen beiden Stellen ebenfalls (in Kleinbuchstaben) geändert werden. Der Grund dafür ist der, dass der Name der Vorlage nicht mit Bestimmtheit zu ermitteln ist. Das trifft insbesondere dann zu, wenn noch andere Vorlagen/AddIns außer der Normal.dot geöffnet sind. Wenn Du den Namen der Vorlage änderst und im Code den Namen nicht mit änderst, dann hat das zur Folge, dass Du beim Speichern einer Rechnung jedesmal gefragt wirst, ob die Änderungen auch in der Vorlage gespeichert werden sollen.
Hoffe, dass Du damit so einigermaßen klarkommst?
Gruß Dieter

Hallo Bätmän!
Also, die alten Dateien 'DocCounter.dot' und 'Rechnung. dot' solltest Du erstmal nicht löschen, sondern nur umbenennen.
Und am besten wäre es natürlich schon, wenn Du eine komplett neue 'Rechnung.dot' erstellst, aber dann fehlt Dir ja die Dokument-Vorlage aus der Word-Ansicht. Allerdings läßt sich der alte Code einfach entfernen, in dem Du auf dem Modul-AutoNr einen Rechtsklick machst und Entfernen von Modul-AutoNr anklickst. Die Nachfrage, ob das Modul gespeichert werden soll, beantwortest Du mit 'Nein'. Und das AddIn 'DocCounter' unter 'Menu>Extras>Vorlagen und AddIns' ebenfalls deaktivieren bzw. Entfernen. Die Datei Counter.dat interessiert jedenfalls nicht und kann erstmal - so wie sie ist - beibehalten werden.
Die CommandBar heißt in der Symbolleiste 'Rechn.-Nr' und sollte, sofern das Modul 'Auto-Nr' entfernt ist, automatisch im Dokument sichtbar sein.
Gruß Dieter
Also, die alten Dateien 'DocCounter.dot' und 'Rechnung. dot' solltest Du erstmal nicht löschen, sondern nur umbenennen.
Und am besten wäre es natürlich schon, wenn Du eine komplett neue 'Rechnung.dot' erstellst, aber dann fehlt Dir ja die Dokument-Vorlage aus der Word-Ansicht. Allerdings läßt sich der alte Code einfach entfernen, in dem Du auf dem Modul-AutoNr einen Rechtsklick machst und Entfernen von Modul-AutoNr anklickst. Die Nachfrage, ob das Modul gespeichert werden soll, beantwortest Du mit 'Nein'. Und das AddIn 'DocCounter' unter 'Menu>Extras>Vorlagen und AddIns' ebenfalls deaktivieren bzw. Entfernen. Die Datei Counter.dat interessiert jedenfalls nicht und kann erstmal - so wie sie ist - beibehalten werden.
Die CommandBar heißt in der Symbolleiste 'Rechn.-Nr' und sollte, sofern das Modul 'Auto-Nr' entfernt ist, automatisch im Dokument sichtbar sein.
Gruß Dieter

Hallo Bätman!
Den Code in ThisDocument hast Du sicherlich auch eingefügt oder?
Nach dem fehlerfreien kompilern des Codes und setzen der Textmarke 'ReNr' im Dokument muss die Datei eigentlich nur noch als Rechnungs.dot abgespeichert und geschlossen werden. Danach die Vorlage erneut öffnen und dann sollte eine Symbolleiste angezeigt und an der Textmarke eine Rechnungsnummer 1 stehen.
Das AddInn entfernst unter AddIns per Entfernen (Haken raus)...
Gruß Dieter
Den Code in ThisDocument hast Du sicherlich auch eingefügt oder?
Nach dem fehlerfreien kompilern des Codes und setzen der Textmarke 'ReNr' im Dokument muss die Datei eigentlich nur noch als Rechnungs.dot abgespeichert und geschlossen werden. Danach die Vorlage erneut öffnen und dann sollte eine Symbolleiste angezeigt und an der Textmarke eine Rechnungsnummer 1 stehen.
Das AddInn entfernst unter AddIns per Entfernen (Haken raus)...
Gruß Dieter

Hallo Bätman!
Gut gemeint, aber mit meiner alten Version, kann ich leider keine *.dotm öffnen
Gruß Dieter
Gut gemeint, aber mit meiner alten Version, kann ich leider keine *.dotm öffnen
Gruß Dieter

Hallo Bätman!
Jepp, hast Du alles richtig gemacht. Deine Rechnungs.doc als *.dot gespeichert funktioniert bei mir einwandfrei.
Gruß Dieter
Jepp, hast Du alles richtig gemacht. Deine Rechnungs.doc als *.dot gespeichert funktioniert bei mir einwandfrei.
Gruß Dieter

Hallo Bätman!
Ich habe ja am Anfang schon erwähnt, dass ich nicht weiß, ob das mit allen neueren Versionen funktioniert. Mit der 2010er Version scheint es jedenfalls nicht zu funktionieren und leider habe ich keine 2010er Version, um herauszufinden, was da anders ist bzw. wo's klemmt
Also, beim Speichern einer Rechnung erhält die Rechnung aktuell z.B. den Namen 'Rechnung 2012-08-19#200100' bzw. wird ein SpeichernUnter-Dialog angezeigt, wobei der genannte Name als Dateiname eingefügt wird.
Den Namen für die Rechnung kannst Du aber ändern, indem Du im EventClassModule ganz oben die Konstante 'sDocName' nach belieben anpasst. D.h. der Text innerhalb der Doppelquoten ("...") wird als Dateiname verwendet, wobei die Variablen (%y, %m, %d und %i) automatisch durch aktuelle Daten, wie Jahr, Monat, Tag und Rechnungsnummer ersetzt werden, also %y=2012, %m=08, %d=19 und %i=200100.
Hinweis: Wenn Du in der Vorlage irgendwas ändern willst, dann muss die Vorlage dazu mit deaktivierten Makro's geöffnet werden.
Wenn Du jetzt mit 2 unterschiedlichen Rechnungsnummern arbeiten willst (300100 und 200100), macht es ja keinen Sinn, die jedesmal entsprechend anzupassen, weil das ja dann nichts mehr mit einer automatischen Erzeugung zu tun hat und der Makrocode somit eigentlich für die Katz ist.
Da wäre es dann sinnvoller zwei Vorlagen mit unterschiedlicher Rechnungsnummer zu verwenden oder besser eine Auswahlmöglichkeit mit einzubauen (Re1, Re2, ...) sowas in der Art.. Da werde ich mir mal Gedanken drüber machen, wie das am besten zu realisieren ist.
Gruß Dieter
PS.
Wenn Du in dem Editierfeld des Counters einen anderen Wert eingibst und mit Return bestätigst, dann wird dieser Wert sofort übernommen und auch in die aktuelle Rechnung eingefügt bzw. die bereits vorhandene durch die neue ersetzt.
Ich habe ja am Anfang schon erwähnt, dass ich nicht weiß, ob das mit allen neueren Versionen funktioniert. Mit der 2010er Version scheint es jedenfalls nicht zu funktionieren und leider habe ich keine 2010er Version, um herauszufinden, was da anders ist bzw. wo's klemmt
Also, beim Speichern einer Rechnung erhält die Rechnung aktuell z.B. den Namen 'Rechnung 2012-08-19#200100' bzw. wird ein SpeichernUnter-Dialog angezeigt, wobei der genannte Name als Dateiname eingefügt wird.
Den Namen für die Rechnung kannst Du aber ändern, indem Du im EventClassModule ganz oben die Konstante 'sDocName' nach belieben anpasst. D.h. der Text innerhalb der Doppelquoten ("...") wird als Dateiname verwendet, wobei die Variablen (%y, %m, %d und %i) automatisch durch aktuelle Daten, wie Jahr, Monat, Tag und Rechnungsnummer ersetzt werden, also %y=2012, %m=08, %d=19 und %i=200100.
Hinweis: Wenn Du in der Vorlage irgendwas ändern willst, dann muss die Vorlage dazu mit deaktivierten Makro's geöffnet werden.
Wenn Du jetzt mit 2 unterschiedlichen Rechnungsnummern arbeiten willst (300100 und 200100), macht es ja keinen Sinn, die jedesmal entsprechend anzupassen, weil das ja dann nichts mehr mit einer automatischen Erzeugung zu tun hat und der Makrocode somit eigentlich für die Katz ist.
Da wäre es dann sinnvoller zwei Vorlagen mit unterschiedlicher Rechnungsnummer zu verwenden oder besser eine Auswahlmöglichkeit mit einzubauen (Re1, Re2, ...) sowas in der Art.. Da werde ich mir mal Gedanken drüber machen, wie das am besten zu realisieren ist.
Gruß Dieter
PS.
Wenn Du in dem Editierfeld des Counters einen anderen Wert eingibst und mit Return bestätigst, dann wird dieser Wert sofort übernommen und auch in die aktuelle Rechnung eingefügt bzw. die bereits vorhandene durch die neue ersetzt.

Hallo Bätman!
Also, ich habe den Code mal insofern geändert, dass die Vorlagen nun unter x-beliebigen Namen gespeichert werden können. D.h. Du kannst die Vorlagen z.B unter den Namen 'Rechnung1.dot', 'Rechnung2.dot' usw. abspeichern, wobei jede Vorlage ihren eigenen Counter erhält, der beliebig angepasst werden kann.
Die Codes im Modul 'Counter' und Klassenmodul 'EventClassModule' müssen gelöscht und durch die nachfolgenden ersetzt werden.
Der Vollständigkeit halber, hier nochmal der komplette Code:
ThisDocument:
Modul Counter:
Klassenmodul EventClassModule:
Gruß Dieter
PS. Wird bei der 2010er Version eigentlich die Rechnungsnummer an der Textmarke eingetragen und taucht unter Ansicht>Symbolleiste der Name 'Rechn.-Nr.' auf?
Also, ich habe den Code mal insofern geändert, dass die Vorlagen nun unter x-beliebigen Namen gespeichert werden können. D.h. Du kannst die Vorlagen z.B unter den Namen 'Rechnung1.dot', 'Rechnung2.dot' usw. abspeichern, wobei jede Vorlage ihren eigenen Counter erhält, der beliebig angepasst werden kann.
Die Codes im Modul 'Counter' und Klassenmodul 'EventClassModule' müssen gelöscht und durch die nachfolgenden ersetzt werden.
Der Vollständigkeit halber, hier nochmal der komplette Code:
ThisDocument:
Option Explicit
Private RegistryEventHandler As New EventClassModule 'Word-Ereignisse in Klassenmodul aktivieren
Private Sub Document_New()
Set oNewDoc = ActiveDocument
Set RegistryEventHandler.AppWord = Word.Application
Call InitCounter
End Sub
Option Explicit
'Registry-Path HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Word Rechnung\VorlageName\Counter
Public Const RegAppName = "Word Rechnung"
Public Const RegKeySave = "Counter"
Public oNewDoc As Document, iCounter As Long
Public Sub InitCounter()
iCounter = GetSetting(RegAppName, oNewDoc.AttachedTemplate.Name, RegKeySave, 1)
Call CreateCommandBar(iCounter)
Call InitBookmarkReNr
End Sub
Private Sub CreateCommandBar(ByVal Counter As Long)
With CommandBars.Add(Name:="Rechn.-Nr.", Temporary:=True)
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonCaption
.Caption = "Counter:"
End With
With .Controls.Add(Type:=msoControlEdit)
.Text = Counter
.Width = 60
.TooltipText = "Aktuelle Rechnungs-Nr. anzeigen (Änderung mit Return übernehmen)"
.OnAction = "ButtonEdit_Click"
End With
.Visible = True
End With
End Sub
Public Sub ButtonEdit_Click()
Dim Value As Variant
Value = CommandBars("Rechn.-Nr.").Controls(2).Text
If IsNumeric(Value) Then
iCounter = Value
Call SaveSetting(RegAppName, oNewDoc.AttachedTemplate.Name, RegKeySave, iCounter)
Call InitBookmarkReNr
Else
MsgBox "Bitte nur numerische Werte eingeben!", vbExclamation, "Fehler..."
End If
End Sub
Private Sub InitBookmarkReNr()
If ActiveDocument.Bookmarks.Exists("ReNr") Then
With ActiveDocument.Bookmarks("ReNr").Range.Words(1)
If .Characters(1) > " " Then .Delete
.InsertBefore iCounter
End With
Else
MsgBox "Die Textmarke 'ReNr' nicht gefunden!", vbExclamation, "Fehler..."
End If
End Sub
Option Explicit
'Rechnungsname bei Bedarf anpassen (%y=YYYY, %m=MM, %d=DD, %i=ReNr)
Private Const sDocName = "Rechnung %y-%m-%d#%i" 'Beispiel: "Rechnung 2012-08-03#12"
Public WithEvents AppWord As Word.Application
Private Sub AppWord_DocumentBeforeSave(ByVal Doc As Document, ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean)
oNewDoc.AttachedTemplate.Saved = True
If SaveAsUI And Doc.Name = oNewDoc.Name Then
With Dialogs(wdDialogFileSaveAs)
.Name = GetDocName
If .Show Then Call SaveSetting(RegAppName, oNewDoc.AttachedTemplate.Name, RegKeySave, iCounter + 1)
End With
Cancel = True: SaveAsUI = False
End If
End Sub
Private Sub AppWord_DocumentBeforeClose(ByVal Doc As Document, ByRef Cancel As Boolean)
oNewDoc.AttachedTemplate.Saved = True
End Sub
Private Function GetDocName() As String
Dim aReplace As Variant, i As Integer
GetDocName = sDocName
aReplace = Array("%y", Year(Date), "%m", Right("0" & Month(Date), 2), "%d", Right("0" & Day(Date), 2), "%i", iCounter)
For i = 0 To UBound(aReplace) Step 2
GetDocName = Replace(GetDocName, aReplace(i), aReplace(i + 1))
Next
End Function
Gruß Dieter
PS. Wird bei der 2010er Version eigentlich die Rechnungsnummer an der Textmarke eingetragen und taucht unter Ansicht>Symbolleiste der Name 'Rechn.-Nr.' auf?

Hallo Bätman!

Gruß Dieter
Bei meiner 2077 Version wird allerdings auch nicht Rechn.-Nr. in die Leiset eingetragen, sondern "counter" und da kann man dann eine Zahl eintragen..
Counter ist Text, der das Editierfeld bezeichnet und in der Symbolleiste 'Rechn.-Nr,' steht. Der Name der Symbolleiste/CommandBar ist 'Rechn.-Nr.'. Siehe Ansicht>Symbolleisten, da sind alle CommandBar's aufgelistetGruß Dieter

Hallo!
Sorry, aber mal davon abgesehen, dass wir ein erhebliches Kommunikationsproblem haben, fällt mir zu diesem Thema nichts mehr ein und ich habe auch echt keine Lust mehr, mich weiterhin mit diesem Thread zu beschäftigen.
Gruß Dieter
Sorry, aber mal davon abgesehen, dass wir ein erhebliches Kommunikationsproblem haben, fällt mir zu diesem Thema nichts mehr ein und ich habe auch echt keine Lust mehr, mich weiterhin mit diesem Thread zu beschäftigen.
Gruß Dieter