ischbindebaetmaen
Goto Top

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

Content-Key: 188772

Url: https://administrator.de/contentid/188772

Printed on: April 25, 2024 at 00:04 o'clock

Mitglied: 76109
76109 Jul 29, 2012 at 14:37:22 (UTC)
Goto Top
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
Member: ischbindebaetmaen
ischbindebaetmaen Jul 29, 2012 at 14:39:32 (UTC)
Goto Top
habe ich, daber das hat ja nur was mit dem Zählerstand zu tun und wo der abgelegt wird....
Mitglied: 76109
76109 Jul 29, 2012 at 15:48:10 (UTC)
Goto Top
Hallo ischbindebaetmaen!

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
Member: ischbindebaetmaen
ischbindebaetmaen Jul 29, 2012 at 15:53:43 (UTC)
Goto Top
Heisst, der Counter funktioniert NUR mit Textmarke? Wenn Du sagst, dass es ziemlich umständlich ist, kennst du evtl. eine alternative Möglichkeit?

Ich bin gerade dabei, mich in das Tehmenfeld Entwicklung einzuarbeiten und dieses Rechnungsformular ist eines meiner ersten Projekte.

Also, wenn Du eine alternative, besser Idee hast, immer raus damit face-wink

Greetz

de Bätmän
Mitglied: 76109
76109 Jul 29, 2012 at 15:59:05 (UTC)
Goto Top
Hallo de Bätmän!

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ügelnface-wink

Gruß Dieter
Member: ischbindebaetmaen
ischbindebaetmaen Jul 29, 2012 at 16:05:55 (UTC)
Goto Top
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.

Das Add-Inn Counter ist aber auch hier aktiviert...Muss ich bei einem ganz neuen Dokument noch irgendwo einen Pfad anpassen? oder wieseo geht das mit der Textmarke im neuen Dokument nicht?

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 face-wink
Mitglied: 76109
76109 Jul 29, 2012 updated at 16:13:24 (UTC)
Goto Top
Hallo


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 kopierenface-wink


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 lesefaulface-smile

Aber hier im Forum findest Du anversich jede Menge Lesestoff!


Gruß Dieter
Member: ischbindebaetmaen
ischbindebaetmaen Jul 29, 2012 at 16:30:12 (UTC)
Goto Top
Ja, habe ich eben gemerkt, die Geschichte mit dem Kopieren face-wink. Jedenfalls Danke Dir erstmal, jetzt komm ich zumindest weiter.

Schönen Abend Dir.

Greetz

Bätmän
Mitglied: 76109
76109 Aug 04, 2012, updated at Aug 05, 2012 at 08:22:27 (UTC)
Goto Top
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:
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
Dieser Code wird in ein Modul mit Namen 'Counter' eingefügt:
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
Und dieser Code wird in ein Klassenmodul mit Namen 'EventClassModule' eingefügt:
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
Member: ischbindebaetmaen
ischbindebaetmaen Aug 07, 2012 at 08:02:29 (UTC)
Goto Top
Wow, Du hast Dir ja echt Mühe gemacht.

Bin gerade dabei, Deinen Code zu testen. Dazu folgende Fragen:

1.
In der Datei Rechnung.dot kann ich TemplateProject(Rechnung) und auch TemplateProject(doccounter) nicht bearbeiten, ist beides gesperrt.

Habe mir die Rechnung.dot kopiert und kann hier jetzt TemplateProject(Rechnung_kopie) bearbeiten.

2.
Habe die Codezeilen entsprechende eingefügt. Ich weiss jetzt allerdings nicht, wie man die Module benennt. Im Moment habe ich hier Module1 und Klasse1

3.
Wo in der Word-Kommadnozeile finde ich denn dieses Editierfeld, nachdem ich den code eingefügt habe?

Grüsse
Bätmän
Mitglied: 76109
76109 Aug 07, 2012 updated at 18:13:27 (UTC)
Goto Top
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?face-wink

Gruß Dieter
Member: ischbindebaetmaen
ischbindebaetmaen Aug 08, 2012 at 14:02:00 (UTC)
Goto Top
Moin Dieter,

bin exakt nach Deiner Anleitung vorgegangen, wenn ich das leere Rechnungdot öffne, erscheint auch eine 1, aber ich finde keine Commandbar, um die Rechnungsnummer entsprechend anzupassen. Wie soll die Comamandbar den aussehen, bzw, wie heisst die? Ist das ein separater Reiter? Ich habe Office 2010, vllt. funktioniert das damit nicht...

Das Add-In für den alten Doccounter ist übrigens noch in der rechnung.dot vorhanden..kann das sich beissen? Evtl. sollte ich die alte Rechnung.dot und counter.dot löschen und eine ganz neue REchnung.dot aus einem leeren Worddoc erstellen. Im VBA sind die alten Modlue nämlich ebenfalls noch vorhanden...
Mitglied: 76109
76109 Aug 08, 2012 at 14:52:32 (UTC)
Goto Top
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
Member: ischbindebaetmaen
ischbindebaetmaen Aug 19, 2012 at 16:47:39 (UTC)
Goto Top
Moin Dieter,

also nachdem ich jetzt ein paar Tage noch etwas anders zu tun hatte, habe ich die mich letzten zwei Tage wieder an die Rechnungsvorlagen gesetzt.

Entweder habe ich was grundsätzlich falsch gemacht oder irgendwas funktioniert das mit Office 2010 nicht.

Ich bin exact nach Deiner Anleitung vorgegangen, einmal mit dem Beispiel der Kopierten und umbenannten Rechnung.dot mit dem alten Add-in.

Bei beiden habe ich keine Commandbar Rechnungsnummer, sondern immer nur die Symbolleiste mit dem alten add-in, obwohl ich das Add-in bei der zweiten möglichkeit komplett gelöscht habe.

Ich komm nicht hinter, was da nicht stimmt.

Nehmen wir an, ich habe einen neuen PC und erstelle eine ganz neue leere Vorlage in Word und speichere diese unter Rechnung.dot

Gibt es irgenwas was ich zusätzlich beachten muss, wenn ich nach Deiner Anleitung vorgehe?

Wie gesagt, bei einer völlig neuen Wordvorlage, Dein VBA-Code eingefügt und kompiliert, erscheint keine entsprechene Kommandozeile.

Hier kannst Du Dir mal nen Screen vom Worddkument und von der VBA Oberfläche in der Vorlage ansehen.

http://www.e-booked.de/screen.jpg

Gruss
Mitglied: 76109
76109 Aug 19, 2012 updated at 17:36:18 (UTC)
Goto Top
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
Member: ischbindebaetmaen
ischbindebaetmaen Aug 19, 2012 at 17:42:04 (UTC)
Goto Top
Klar, gleich als erstes face-wink

Nö, die Symbolleiste bekomm ich nicht und dass Add-In ist trotzdem noch in der Symbolleiste, obwohl ich es entfernt habe. Wie wärs, wenn ich Dir die Rechungs.dotm mal schicke, dann kannste mal sehen, ob ich was falsch gemacht habe.

http://www.e-booked.de/Rechnung.dotm
Mitglied: 76109
76109 Aug 19, 2012 at 17:50:53 (UTC)
Goto Top
Hallo Bätman!

Gut gemeint, aber mit meiner alten Version, kann ich leider keine *.dotm öffnenface-sad

Gruß Dieter
Member: ischbindebaetmaen
ischbindebaetmaen Aug 19, 2012 at 17:57:33 (UTC)
Goto Top
hmmm, wie speicherts Du denn die Vorlage dann ab? Ich bekommen nämlich immer die Meldung, Vorlage kann nicht in .dot gespeichert werden, da VBA-Makros sonst nicht ausgeführt werden.

Na egal, ich schick Dir mal die Vorlage in .dot, vielleicht klappts ja..

www.e-booked.de/Rechnung.dot
Mitglied: 76109
76109 Aug 19, 2012 at 19:05:02 (UTC)
Goto Top
Hallo Bätman!

Jepp, hast Du alles richtig gemacht. Deine Rechnungs.doc als *.dot gespeichert funktioniert bei mir einwandfrei.

Gruß Dieter
Member: ischbindebaetmaen
ischbindebaetmaen Aug 19, 2012 updated at 20:52:55 (UTC)
Goto Top
Heisst das, es funktioniert einfach nur mit Office 2010 nicht, kann das sein? Was hast Du denn für eine Version?

Wo hast Du denn die Kommandozeile?


Edit:

OK ich habs jetzt mal bei einem anderen PC mit Office 2007 versucht. Da geht es und da habe ich auch den Counter in der Menüleiste.

Jetzt aber noch mal zwei Fragen:

Wie geh ich jetzt vor, wenn ich zwei verschiedene Rechnungsformulare anlegen will, eines mit Nummerierung z.B. 300100 und das andere mit Nummerierung 200100. Muss ich dass dann im Rechnung.dot im Counter oben eingeben oder wie funktioniert das?

Und wenn ich die Rechnung speichern will, gibst es da die Möglichkeit, beim "Speichern Unter" Dialog automatisch die Rechnungsnummer und vllt Datum mit Jahr als Dateinamen vergeben zu lassen?

Beinhaltet das die Codierung?
Mitglied: 76109
76109 Aug 19, 2012 updated at 22:01:49 (UTC)
Goto Top
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 klemmtface-wink

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.
Mitglied: 76109
76109 Aug 20, 2012 updated at 10:19:27 (UTC)
Goto Top
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:
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
Modul Counter:
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
Klassenmodul EventClassModule:
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?
Member: ischbindebaetmaen
ischbindebaetmaen Aug 20, 2012 at 15:15:20 (UTC)
Goto Top
in der 2010 Version passiert ehrlich gesagt gar nichts, weder wird die Nummer eingetragen, noch die "Rechn-Nr" in die Symbolleiste eingetragen. Und es erscheint noch immer unter add-in der doc-counter.dot.

Bei meiner 2077 Version wird allerdings auch nicht Rechn.-Nr. in die Leiset eingetragen, sondern "counter" und da kann man dann eine Zahl eintragen..
Mitglied: 76109
76109 Aug 20, 2012 updated at 16:21:15 (UTC)
Goto Top
Hallo Bätman!

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 aufgelistetface-wink

Gruß Dieter
Member: ischbindebaetmaen
ischbindebaetmaen Sep 03, 2012 at 14:15:14 (UTC)
Goto Top
Grüss Dich,

heute komm ich endlich dazu, Deine Codierung auszuprobieren. Es funktioniert so technisch gut, auch mit der Speicherung mit automatischem Dateinamen.

Allerdings habe ich ein kleines Problem, ich kann die Rechnungsnummer mit dem Counter nur in einem geöffneten Dokument ändern, weil mir NUR im Dokument die Registrierkarte "Add-Ins"-"Counter" angezeigt wird. Das hat natürlich keinen Effekt.

In der Vorlage "Rechnung.dot" bekommme ich den Reiter "Add-Ins"-"Counter" nicht angezeigt und kann die Rechnungsnummerierung entsprechend nicht ändern. Weisst Du, wie ich die Registrierkarter herbekomme? Im Dokument, wie gesagt, habe ich Sie...ist jetzt Word 2007.
Mitglied: 76109
76109 Sep 08, 2012 updated at 12:53:30 (UTC)
Goto Top
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
Member: ischbindebaetmaen
ischbindebaetmaen Sep 08, 2012 at 13:03:46 (UTC)
Goto Top
Inwiefern siehst Du denn ein Kommunikationsproblem?

Danke Dir jedenfalls für die Codierung.

Greetz

Bätmän