title image


Smiley Re: Nummerierung in Word
HalloWord bietet eine stattliche Anzahl von Lösungsansätzen um dies Aufegeabensetllung zu verwirklichen.Ich bin z.Z. daran, das Ganze in einem etwas grösseren Zusammenhange zu dokumentieren.leider ist diese Doku noch nicht fertig. Deshalb speise ich Dich jetzt mit Fragmenten ab.Melde Dich bei Problemen wieder.GrussSilviaSpeicher in der „Registry“ wie zu den noch besseren Zeiten vonSpeicher in der "Registry" wie zu den noch besseren Zeiten vonWindows 9xSpeicherort: In einem privaten String der "Registry" (Registrierdatenbank)Erstellung: Mittels VBA-Code (Makro). Die Daten können auch mit dem Programm "regedit" in der Registrierdatenbank eingesehen und verändert werdenSichtbarkeit: Grundsätzlich können alle Anwendungen darauf zugreifen.Portabilität: Die Daten müssen in die Registrierdatenbank des Zielrechners eingebracht werden. Wird das nicht gemacht, beginnt die Geschichte beim Zielrechner bei null.Anmerkungen: Um einen Parameter in die Registry einzubringen verwendet man die"PrivatePropertyString-Methode". Die Syntax verlangt zwingend drei Argumente, namentlich: "FileName", "Section" und "Key". Wenn Sie einen Registry-Eintrag erstellen möchten, müssen Sie dem Parameter"FileName" zwingend einen leeren Wert zuweisen. Es wird dringend empfohlen, die Konvention einzuhalten und den Wert der "Section" mit folgendem Wert zu beginnen:aSec = "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word"Sie können mit der beschriebenen Funktion beliebige Werte in der Registry abändern, also auch Werte, welche nicht von Ihnen eingebracht wurden.  V O R S I C H T: BEVOR SIE MIT DER REGISTRY EXPERIMENTIEREN, SOLLTEN SIE DIESE ZUVOR SICHERN !!! Syntax (VBA):aSec ="HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word"aSec = aSec + "\Rechnung"System.PrivateProfileString(FileName:="", Section:=aSec, _ Key:="DokNum") = 1Hier wird der Parameter "DokNum" unter dem Schlüssel "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word\Rechnung" in die Registry geschrieben. Gleichzeitig wird der Wert dieses Parameters auf "1" gesetzt. Sollte dieser Schlüssel oder Parameter noch nicht existieren, wird dieser nun erstellt.aSec ="HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word"aSec = aSec + "\Rechnung"Num = System.PrivateProfileString(FileName:="", _ Section:=aSec, Key:="DokNum")(Hier wird die Nummer in eine Variable eingelesen)Nächste = CDbl(System.PrivateProfileString(FileName:="", _ Section:=aSec, Key:="DokNum")) + 1 (Hier wird die Nummer in eine Variable eingelesen und zusätzlich die nächst höhere Nummer bestimmt. Wir müssen sicherstellen, dass der Wert welcher von der Registrierdatenbank zurückgegeben wird numerisch ist, damit die Addition glückt. Das erreichen wir mit der VB(A)-Funktion "CDbl"). Beispiel aus der PraxisDen nachfolgenden Beispiel geht folgendes Szenario voraus:SzenarioEs gibt eine Dokumentvorlage, welche dazu bestimmt ist, Rechnungen zu erstellen.Es soll sicher gestellt werden, dass die Name unter dem die Rechnungen gesichert werden, einem gewissen Muster folgen und aufsteigend nummeriert sind.Jede Rechnung hat eine eindeutige Rechnungsnummer, welche den gleichen Grundsätzen gehorchen soll, wie der Name unter dem die Rechnung gespeichert wird. Diese Nummer soll automatisch in jede Rechnung eingefügt werden.Diese Nummer beginnt mit 001-061- anschliessend folgt einer dreistellige Nummer (Korrelator). Die erste Rechnung soll also 001-061-001 heissen, die zweite 001-061-002, u.s.w.LösungswegWir fügen an geeigneter Stelle in der Dokumentenvorlage eine Dokumenten-Variable ein. Diese Felddefinition wird beim erstellen einer neuen Rechnung auf das Dokument vererbt. Als Name für die Variable wählen wir "RechNr".Den aktuellen Wert der Rechnungsnummer halten wir in der Registrierdatenbank fest und führen ihn auch dort nach. Der Schlüssel unter dem dir Rechnungsnummer nach geführt wird setzen wir wie folgt fest:HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\VBA-Projekte\.........\RechNrDie Punkte stehen für den Namen der Vorlage (ohne Dateierweiterung). Der Name der Vorlage soll Rechnung.dot lauten.Um die ganze Sache zu automatisieren erstellen wir den Code in einer Ereignissprozedur. Diese Prozedur wird Document_New heissen. Sie wird jedesmal wenn auf Grund der Vorlage Rechnung.dot ein neues Dokument generiert wird, ablaufen.Um uns das richtige Umfeld zu schaffen öffnen wir also unsere Dokumentenvorlage (Rechtsklick während der Zeiger auf die Vorlage verweilt und über das Kontextmenü den Eintrag "Öffnen" wählen). Als nächstes wechseln wir in die VBA-Umgebung. Dazu drücken wir die Tastenkombination [Alt + F11].Nun brauchen wir den Projekt-Manager. Je nach Situation wird dieser schon angezeigt. Um sicher zu gehen, dass er bestimmt angezeigt wird, drücken wie die Tastenkombination [Strg + R]. Im Projekt-Manager führen wir nun einen Doppelklick auf den Eintrag "ThisDocument" aus. Durch diese Aktion wird ein vorerst (fast) leeres Fenster geöffnet. In der linken "Drop-down"-Liste schalten wir von "Allgemein" auf "Document" um. Mit dieser Aktion erscheint in der rechten "Drop-down"-Liste der Begriff "new". Damit liegen wir goldrichtig. Im weiteren wurden zwei Zeilen Code generiert, nämlich: "Sub Document_New" und "End Sub". Dieses Gerüst können wir in dieser Form sehr gut gebrauchen.Falls ich Ihre Anfrage richtig interpretiere, kommen mir mindestens vier Lösungsansätze in den Sinn:Eine Dokumenten Variable, deren aktueller Wert aber in Ihrem Fall in der Dokumentenvorlage gespeichert werden müssteMit einer privaten Dokument-Eigenschaft (PrivateDocumentProperty), welche ebenfalls in der Vorlage nachgeführt würdeMit einer INI-Date, wie zu Windows 3.1x-Zeiten. Auch dazu bietet VBA-Word eine hervorragende SchnittstelleÜber einen eigens eingeführten Parameter in der Windows Registrierdatenbank.Ich habe mich für die letzte Version entschlossen. Auch diese Lösung basiert aber letztlich darauf, dass sich in der Dokumentenvorlage eine „DOKVARIABLE“ befindet. Der aktuelle Wert, welcher der Variablen zugewiesen wird ist aber in der „Registry“ gespeichert.Gehen Sie wie folge vor:Fügen Sie Ihrer Dokumentenvorlage an geeigneter Stelle ein Feld (Typus „DokVariable“) ein und nennen Sie diese „RechnungsNr“. Also Einfügen – Feld – DokVariable „RechnungsNr“. Vergessen Sie die Gänsefüsschen nicht.Speichern Sie jetzt die Vorlage. Wenn Sie jetzt ein Dokument auf der Basis dieser Vorlage erstellen, wird das Feld vererbt. Was allerdings noch fehlt, ist der Wert.Öffnen Sie also die Vorlage wieder. Kopieren Sie den unten abgebildeten Code im VBA-Editor in ein Modul, welcher dieser Vorlage angehören muss. Überprüfen Sie das im Projektexplorer, welchen Sie in der VBA-Umgebung mit [Strg+R] aufrufen können. Damit der Prozess beim klonen eines neuen Dokumentes startet, muss der Prozess zwingend „AutoNew“ heissen, ändern Sie diesen Namen der Prozedur nicht. Der Name des Moduls wie Sie ihn im Projekt-Explorer sehen, ist dagegen nicht relevant.Widmen Sie sich jetzt den beiden „Private Const“ Anweisungen im Kopf des Makros. Passen Sie den Präfix nach Ihren Bedürfnissen an. Er markiert den nicht veränderlichen Teile der Rechnungsnummer. Die Konstante „NrFormat“ sagt aus, wie viele führende Nullen erwünscht sind (Anzahl Stellen).Nun können Sie die Dokumentenvorlage sichern. Wenn Sie jetzt ein Dokument auf der Basis dieser Vorlage erstellen, sollte die Rechnungsnummer um eines hoch gezählt werden und in das neue Dokument eingefügt werden.Die aktuelle Nummer, beziehungsweise den Teil welcher hoch gezählt wird, finden Sie in der Registrierdatenbank von Windows unter dem Schlüssel: (Wobei es auf den Namen der Vorlage drauf an kommt – in meinem Beispiel ist der Name der Vorlage:„Rechnung“HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word\Rechnung\RechnungsNrBei Fragen, melden Sie sich wieder -------------------------------- schnipp --------------------------------Private Const Präfix = "009-192-"Private Const NrFormat = "000"Sub AutoNew() aSec = "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word" aSec = aSec + "\" + Left(ThisDocument.Name, InStr(ThisDocument.Name, ".") - 1) Num = System.PrivateProfileString(FileName:="", Section:=aSec, Key:="RechnungsNr") If Num = "" Then Num = 1 Num = Num + 1 System.PrivateProfileString(FileName:="", Section:=aSec, Key:="RechnungsNr") = Num RechNr = Präfix + Format(Num, NrFormat) ActiveDocument.Variables("RechnungsNr").Value = RechNr ActiveDocument.Fields.UpdateEnd Sub-------------------------------- schnapp --------------------------------

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: