Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Automatische Vergabe einer Rechnungsnummer in Word2010

Frage Microsoft Microsoft Office

Mitglied: ischbindebaetmaen

ischbindebaetmaen (Level 1) - Jetzt verbinden

29.07.2012 um 16:30 Uhr, 6332 Aufrufe, 27 Kommentare

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
27 Antworten
Mitglied: 76109
29.07.2012 um 16:37 Uhr
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
Bitte warten ..
Mitglied: ischbindebaetmaen
29.07.2012 um 16:39 Uhr
habe ich, daber das hat ja nur was mit dem Zählerstand zu tun und wo der abgelegt wird....
Bitte warten ..
Mitglied: 76109
29.07.2012 um 17:48 Uhr
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
Bitte warten ..
Mitglied: ischbindebaetmaen
29.07.2012 um 17:53 Uhr
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

Greetz

de Bätmän
Bitte warten ..
Mitglied: 76109
29.07.2012 um 17:59 Uhr
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ügeln

Gruß Dieter
Bitte warten ..
Mitglied: ischbindebaetmaen
29.07.2012 um 18:05 Uhr
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
Bitte warten ..
Mitglied: 76109
29.07.2012, aktualisiert um 18:13 Uhr
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 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 lesefaul

Aber hier im Forum findest Du anversich jede Menge Lesestoff!


Gruß Dieter
Bitte warten ..
Mitglied: ischbindebaetmaen
29.07.2012 um 18:30 Uhr
Ja, habe ich eben gemerkt, die Geschichte mit dem Kopieren . Jedenfalls Danke Dir erstmal, jetzt komm ich zumindest weiter.

Schönen Abend Dir.

Greetz

Bätmän
Bitte warten ..
Mitglied: 76109
04.08.2012, aktualisiert 05.08.2012
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:
01.
Option Explicit 
02.
 
03.
Private RegistryEventHandler As New EventClassModule    'Word-Ereignisse in Klassenmodul aktivieren 
04.
 
05.
Private Sub Document_New() 
06.
    Set oNewDoc = ActiveDocument 
07.
    Set RegistryEventHandler.AppWord = Word.Application 
08.
    Call InitCounter 
09.
End Sub
Dieser Code wird in ein Modul mit Namen 'Counter' eingefügt:
01.
Option Explicit 
02.
 
03.
'Registry-Path HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Word Rechnung\Settings\Counter 
04.
Public Const RegAppName = "Word Rechnung" 
05.
Public Const RegSecName = "Settings" 
06.
Public Const RegKeySave = "Counter" 
07.
 
08.
Public oNewDoc As Document, iCounter As Long 
09.
 
10.
Public Sub InitCounter() 
11.
    iCounter = GetSetting(RegAppName, RegSecName, RegKeySave, 1) 
12.
    Call CreateCommandBar 
13.
    Call InitBookmarkReNr 
14.
End Sub 
15.
 
16.
Private Sub CreateCommandBar() 
17.
    With CommandBars.Add(Name:="Rechn.-Nr.", Temporary:=True) 
18.
        With .Controls.Add(Type:=msoControlButton) 
19.
            .Style = msoButtonCaption 
20.
            .Caption = "Counter:" 
21.
        End With 
22.
         
23.
        With .Controls.Add(Type:=msoControlEdit) 
24.
            .Text = iCounter 
25.
            .Width = 60 
26.
            .TooltipText = "Aktuelle Rechnungs-Nr. anzeigen (Änderung mit Return übernehmen)" 
27.
            .OnAction = "ButtonEdit_Click" 
28.
        End With 
29.
        
30.
       .Visible = True 
31.
    End With 
32.
End Sub 
33.
 
34.
Public Sub ButtonEdit_Click() 
35.
    Dim Value As Variant 
36.
     
37.
    Value = CommandBars("Rechn.-Nr.").Controls(2).Text 
38.
     
39.
    If IsNumeric(Value) Then 
40.
        iCounter = Value 
41.
        Call SaveSetting(RegAppName, RegSecName, RegKeySave, iCounter) 
42.
        Call InitBookmarkReNr 
43.
    Else 
44.
        MsgBox "Bitte nur numerische Werte eingeben!", vbExclamation, "Fehler..." 
45.
    End If 
46.
End Sub 
47.
 
48.
Private Sub InitBookmarkReNr() 
49.
    If ActiveDocument.Bookmarks.Exists("ReNr") Then 
50.
        With ActiveDocument.Bookmarks("ReNr").Range.Words(1) 
51.
            If .Characters(1) > " " Then .Delete 
52.
           .InsertBefore iCounter 
53.
        End With 
54.
    Else 
55.
        MsgBox "Die Textmarke 'ReNr' nicht gefunden!", vbExclamation, "Fehler..." 
56.
    End If 
57.
End Sub
Und dieser Code wird in ein Klassenmodul mit Namen 'EventClassModule' eingefügt:
01.
Option Explicit 
02.
 
03.
'Rechnungsname bei Bedarf anpassen (%y=YYYY, %m=MM, %d=DD, %i=ReNr) 
04.
Private Const sDocName = "Rechnung %y-%m-%d#%i"    'Beispiel: "Rechnung 2012-08-03#12" 
05.
 
06.
Public WithEvents AppWord As Word.Application 
07.
 
08.
Private Sub AppWord_DocumentBeforeSave(ByVal Doc As Document, ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) 
09.
    Dim Template As Object 
10.
     
11.
    For Each Template In Templates 
12.
        If LCase(Template.Name) = "rechnung.dot" Then Template.Saved = True 
13.
    Next 
14.
     
15.
    If SaveAsUI And Doc.Name = oNewDoc.Name Then 
16.
        With Dialogs(wdDialogFileSaveAs) 
17.
            .Name = GetDocName 
18.
             If .Show Then Call SaveSetting(RegAppName, RegSecName, RegKeySave, iCounter + 1) 
19.
        End With 
20.
        Cancel = True:  SaveAsUI = False 
21.
    End If 
22.
End Sub 
23.
 
24.
Private Sub AppWord_DocumentBeforeClose(ByVal Doc As Document, ByRef Cancel As Boolean) 
25.
    Dim Template As Object 
26.
     
27.
    For Each Template In Templates 
28.
        If LCase(Template.Name) = "rechnung.dot" Then Template.Saved = True 
29.
    Next 
30.
End Sub 
31.
 
32.
Private Function GetDocName() As String 
33.
    Dim aReplace As Variant, i As Integer 
34.
     
35.
    GetDocName = sDocName 
36.
     
37.
    aReplace = Array("%y", Year(Date), "%m", Right("0" & Month(Date), 2), "%d", Right("0" & Day(Date), 2), "%i", iCounter) 
38.
     
39.
    For i = 0 To UBound(aReplace) Step 2 
40.
        GetDocName = Replace(GetDocName, aReplace(i), aReplace(i + 1)) 
41.
    Next 
42.
End Function
Viel Spaß beim Testen!

Gruß Dieter
Bitte warten ..
Mitglied: ischbindebaetmaen
07.08.2012 um 10:02 Uhr
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
Bitte warten ..
Mitglied: 76109
07.08.2012, aktualisiert um 20:13 Uhr
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
Bitte warten ..
Mitglied: ischbindebaetmaen
08.08.2012 um 16:02 Uhr
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...
Bitte warten ..
Mitglied: 76109
08.08.2012 um 16:52 Uhr
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
Bitte warten ..
Mitglied: ischbindebaetmaen
19.08.2012 um 18:47 Uhr
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
Bitte warten ..
Mitglied: 76109
19.08.2012, aktualisiert um 19:36 Uhr
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
Bitte warten ..
Mitglied: ischbindebaetmaen
19.08.2012 um 19:42 Uhr
Klar, gleich als erstes

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
Bitte warten ..
Mitglied: 76109
19.08.2012 um 19:50 Uhr
Hallo Bätman!

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

Gruß Dieter
Bitte warten ..
Mitglied: ischbindebaetmaen
19.08.2012 um 19:57 Uhr
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
Bitte warten ..
Mitglied: 76109
19.08.2012 um 21:05 Uhr
Hallo Bätman!

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

Gruß Dieter
Bitte warten ..
Mitglied: ischbindebaetmaen
19.08.2012, aktualisiert um 22:52 Uhr
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?
Bitte warten ..
Mitglied: 76109
19.08.2012, aktualisiert 20.08.2012
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.
Bitte warten ..
Mitglied: 76109
20.08.2012, aktualisiert um 12:19 Uhr
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:
01.
Option Explicit 
02.
 
03.
Private RegistryEventHandler As New EventClassModule    'Word-Ereignisse in Klassenmodul aktivieren 
04.
 
05.
Private Sub Document_New() 
06.
    Set oNewDoc = ActiveDocument 
07.
    Set RegistryEventHandler.AppWord = Word.Application 
08.
    Call InitCounter 
09.
End Sub
Modul Counter:
01.
Option Explicit 
02.
 
03.
'Registry-Path HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Word Rechnung\VorlageName\Counter 
04.
Public Const RegAppName = "Word Rechnung" 
05.
Public Const RegKeySave = "Counter" 
06.
 
07.
Public oNewDoc As Document, iCounter As Long 
08.
 
09.
Public Sub InitCounter() 
10.
    iCounter = GetSetting(RegAppName, oNewDoc.AttachedTemplate.Name, RegKeySave, 1) 
11.
    Call CreateCommandBar(iCounter) 
12.
    Call InitBookmarkReNr 
13.
End Sub 
14.
 
15.
Private Sub CreateCommandBar(ByVal Counter As Long) 
16.
    With CommandBars.Add(Name:="Rechn.-Nr.", Temporary:=True) 
17.
        With .Controls.Add(Type:=msoControlButton) 
18.
            .Style = msoButtonCaption 
19.
            .Caption = "Counter:" 
20.
        End With 
21.
         
22.
        With .Controls.Add(Type:=msoControlEdit) 
23.
            .Text = Counter 
24.
            .Width = 60 
25.
            .TooltipText = "Aktuelle Rechnungs-Nr. anzeigen (Änderung mit Return übernehmen)" 
26.
            .OnAction = "ButtonEdit_Click" 
27.
        End With 
28.
        
29.
       .Visible = True 
30.
    End With 
31.
End Sub 
32.
 
33.
Public Sub ButtonEdit_Click() 
34.
    Dim Value As Variant 
35.
     
36.
    Value = CommandBars("Rechn.-Nr.").Controls(2).Text 
37.
     
38.
    If IsNumeric(Value) Then 
39.
        iCounter = Value 
40.
        Call SaveSetting(RegAppName, oNewDoc.AttachedTemplate.Name, RegKeySave, iCounter) 
41.
        Call InitBookmarkReNr 
42.
    Else 
43.
        MsgBox "Bitte nur numerische Werte eingeben!", vbExclamation, "Fehler..." 
44.
    End If 
45.
End Sub 
46.
 
47.
Private Sub InitBookmarkReNr() 
48.
    If ActiveDocument.Bookmarks.Exists("ReNr") Then 
49.
        With ActiveDocument.Bookmarks("ReNr").Range.Words(1) 
50.
            If .Characters(1) > " " Then .Delete 
51.
           .InsertBefore iCounter 
52.
        End With 
53.
    Else 
54.
        MsgBox "Die Textmarke 'ReNr' nicht gefunden!", vbExclamation, "Fehler..." 
55.
    End If 
56.
End Sub
Klassenmodul EventClassModule:
01.
Option Explicit 
02.
 
03.
'Rechnungsname bei Bedarf anpassen (%y=YYYY, %m=MM, %d=DD, %i=ReNr) 
04.
Private Const sDocName = "Rechnung %y-%m-%d#%i"    'Beispiel: "Rechnung 2012-08-03#12" 
05.
 
06.
Public WithEvents AppWord As Word.Application 
07.
 
08.
Private Sub AppWord_DocumentBeforeSave(ByVal Doc As Document, ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) 
09.
    oNewDoc.AttachedTemplate.Saved = True 
10.
     
11.
    If SaveAsUI And Doc.Name = oNewDoc.Name Then 
12.
        With Dialogs(wdDialogFileSaveAs) 
13.
            .Name = GetDocName 
14.
             If .Show Then Call SaveSetting(RegAppName, oNewDoc.AttachedTemplate.Name, RegKeySave, iCounter + 1) 
15.
        End With 
16.
        Cancel = True:  SaveAsUI = False 
17.
    End If 
18.
End Sub 
19.
 
20.
Private Sub AppWord_DocumentBeforeClose(ByVal Doc As Document, ByRef Cancel As Boolean) 
21.
    oNewDoc.AttachedTemplate.Saved = True 
22.
End Sub 
23.
 
24.
Private Function GetDocName() As String 
25.
    Dim aReplace As Variant, i As Integer 
26.
     
27.
    GetDocName = sDocName 
28.
     
29.
    aReplace = Array("%y", Year(Date), "%m", Right("0" & Month(Date), 2), "%d", Right("0" & Day(Date), 2), "%i", iCounter) 
30.
     
31.
    For i = 0 To UBound(aReplace) Step 2 
32.
        GetDocName = Replace(GetDocName, aReplace(i), aReplace(i + 1)) 
33.
    Next 
34.
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?
Bitte warten ..
Mitglied: ischbindebaetmaen
20.08.2012 um 17:15 Uhr
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..
Bitte warten ..
Mitglied: 76109
20.08.2012, aktualisiert um 18:21 Uhr
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 aufgelistet

Gruß Dieter
Bitte warten ..
Mitglied: ischbindebaetmaen
03.09.2012 um 16:15 Uhr
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.
Bitte warten ..
Mitglied: 76109
08.09.2012, aktualisiert um 14:53 Uhr
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
Bitte warten ..
Mitglied: ischbindebaetmaen
08.09.2012 um 15:03 Uhr
Inwiefern siehst Du denn ein Kommunikationsproblem?

Danke Dir jedenfalls für die Codierung.

Greetz

Bätmän
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows 7
gelöst Automatische User Abmeldung nach Inaktivität (30s) (10)

Frage von IT-Blondi zum Thema Windows 7 ...

Linux Desktop
gelöst Linux Mint automatische Anmeldung deaktivieren (4)

Frage von laster zum Thema Linux Desktop ...

Exchange Server
gelöst Exchange 2013 - automatische Einbindung von Postfächern in Outlook 2010 (8)

Frage von ingoue zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...