Word-Dokument. Eine GLOBAL hochzählende Nummer

  • Word

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Manschula.

    Word-Dokument. Eine GLOBAL hochzählende Nummer

    Hi,

    ich schicke vorab... Ich kann VB.Net, VB6, Java usw. aber KEIN VBA XD
    Trotzdem habe ich jetzt ein Problem was ich hoffentlich mit VBA lösen kann.

    Es geht darum. Hier im Hause gibt es so genannte "Handlieferscheine". Auf diesen ist eine EINDEUTIGE Nummer. Das heißt... Ich muss in einem Word-Formular an der entsprechenden Stelle eine Nummer haben die immer beim öffnen der Vorlage (.dot) um 1 hochgezählt wird. Diese Vorlage wird auf dem Server hier gelagert und ALLE Mitarbeiter greifen auf genau diese zu.

    KANN man sowas über VBA lösen und wenn ja... hat jemand dazu ne kleine Info für mich wie?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    KANN man sowas über VBA lösen und wenn ja... hat jemand dazu ne kleine Info für mich wie?

    Moin,

    ja, das geht.
    Z.B. so:

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Sub AutoOpen()
    2. Dim nCounter As Long
    3. nCounter = ActiveDocument.Bookmarks("counter").Range
    4. nCounter = nCounter + 1
    5. ReplaceBookmarkText ActiveDocument, "counter", CStr(nCounter)
    6. End Sub
    7. Sub ReplaceBookmarkText(oDoc As Document, strBMName As String, strBMText As String)
    8. Dim rng As Range
    9. If oDoc.Bookmarks.Exists(strBMName) Then
    10. Set rng = oDoc.Bookmarks(strBMName).Range
    11. rng.Text = strBMText
    12. oDoc.Bookmarks.Add strBMName, rng
    13. Set rng = Nothing
    14. End If
    15. End Sub


    Anbei noch ein Worddokument als Anhang, wo dies umgesetzt ist.
    Wenn Du die Vorlage mit dem Windows-Explorer öffnest (rechte Maustaste -> Kontextmenü -> öffnen), dann startet das Makro und zählt die Zahl im Dokument um 1 hoch.
    Makros müssen natürlich zugelassen sein und die Sicherheitsstufe muss ganz runter.

    Viel Spaß beim Experimentieren,
    Bruno
    Dateien
    • vorlage.zip

      (8,84 kB, 524 mal heruntergeladen, zuletzt: )
    Hi und danke für die Hilfe.

    Der Code sieht für mich als Laien erstmal sinnvoll aus.
    Du hast ne Routine "AutoOpen" erstellt die einen Counter "nCounter" immer um eins nach oben zählt wenn sie ausgeführt wird.
    Ich weiß nicht ob du AutoOpen erstellt hast, oder ob das eine Funktion vom Word ist, wie zB. in VB das Form_Load. Da es aber von dir nirgends augerufen wird, denke ich dass es dem Form_Load ähnlich ist.
    Dann führst du in dieser Routine eine weitere Routine zum überschreiben des Bookmarks aus, welcher mit dem neuen Counter gefüllt wird.
    Die Routine zum schreiben des Bookmarks ist soweit verständlich.

    Nun habe ich beim Testen jedoch das Problem!? dass in der .dot immer "1007" steht. Wenn ich diese als doc unter anderem Namen speichere macht er mir ne 1008 raus. Wenn ich diese .doc nochmals öffne, bleibt weiterhin 1008 stehen.

    Ich benötige ja, dass er bei jedem Start einen Wert um eins hoch zählt. Und soweit ich das verstehe macht der Code ja auch genau das. Er greift sich den aktuell gesetzten Wert ab und überschreibt ihn. Und ich denke hier ist der Knackpunkt. Die .dot wird ja nie gespeichert. Meist wird das Ding ja aufgerufen, ausgefüllt und dann gedruckt.
    Ich hoffe das war soweit verständlich ^^

    Könnte man in der Funktion hinterlegen, dass er direkt nach dem Start und dem hochzählen die dot speichert und somit der Wert hochgezählt wäre?

    Und nochmals... Danke für die Hilfe. Ich verstehe zwar die Syntax einigermaßen, aber die Vokabeln fehlen mir ;)

    Meine erste Idee war

    Visual Basic-Quellcode

    1. ActiveDocument.Save
    direkt in der AutoOpen Routine nach dem ReplaceBookmarkText auszuführen. Aber das hilft wohl nicht.

    Dann dachte ich... ermittel den Dateipfad... der wird bei Save sicher ne Doc schreiben... Aber wenn ich

    Visual Basic-Quellcode

    1. Application.ActiveDocument.FullName
    abfrage wirft er mir auch Dokument1 zurück und nicht den Pfad der .dot Datei.

    Eine andere alternative wäre ja eine hinterlegte .txt Datei oder ähnliches, in welche der Wert steht und welche immer nur kurz ausgelesen wird. Dieser Wert wird dann um 1 hochgezählt in die txt zurückgeschrieben und ins Word-Formulat geschrieben.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    MemoAnMichSelbst schrieb:

    Eine andere alternative wäre ja eine hinterlegte .txt Datei oder ähnliches, in welche der Wert steht und welche immer nur kurz ausgelesen wird. Dieser Wert wird dann um 1 hochgezählt in die txt zurückgeschrieben und ins Word-Formulat geschrieben.


    So würde ich es machen. Der Pfad sollte mit

    Visual Basic-Quellcode

    1. application.ActiveDocument.Path
    herauszufinden sein.
    Bei einer "globalen" Datei würde ich den Netzwerkpfad wohl aber direkt hinterlegen.

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Private Sub test()
    2. Dim Nummer As Long
    3. Nummer = NummerHolen
    4. If Nummer > 0 Then
    5. MsgBox Nummer, vbOKOnly + vbInformation
    6. Else
    7. MsgBox "Pfad nicht vorhanden", vbOKOnly + vbCritical
    8. End If
    9. End Sub
    10. Private Function NummerHolen() As Long
    11. Dim pfad As String
    12. Dim f As Integer
    13. Dim s As String
    14. pfad = Application.ActiveDocument.Path
    15. If pfad = "" Then pfad = "g:\Vorlagen"
    16. If FileExists(pfad & "\", True) Then
    17. Dateiname = pfad & "\fortlaufendenummer.txt"
    18. f = FreeFile
    19. If FileExists(Dateiname) Then
    20. Open Dateiname For Input As #f
    21. Line Input #f, s
    22. If IsNumeric(s) Then
    23. NummerHolen = CLng(s)
    24. End If
    25. Close #f
    26. NummerHolen = NummerHolen + 1
    27. Else
    28. NummerHolen = 1
    29. End If
    30. Open Dateiname For Output As #f
    31. Print #f, Str(NummerHolen)
    32. Close #f
    33. Else
    34. NummerHolen = 0
    35. End If
    36. End Function
    37. Private Function FileExists(ByVal Dateiname, Optional Ordner As Boolean = False) As Boolean
    38. If Ordner Then
    39. If Dir(Dateiname, vbDirectory) <> "" Then
    40. FileExists = True
    41. End If
    42. Else
    43. If Dir(Dateiname) <> "" Then
    44. FileExists = True
    45. End If
    46. End If
    47. End Function
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „peterfido“ ()

    Aloa und herzlichen Dank. Das klappt soweit. Er zählt hoch usw.

    ABER ^^ ein kleines Problem habe ich noch.
    Ich starte die Routine beim AutoOpen... Habe diese in der .dot hinterlegt. Nur leider führt er diese nicht aus, wenn jemand die Vorlage via Doppelklick startet... Sondern nur, wenn man diese explizit über Word öffnet.

    Ich denke es hat wieder etwas damit zutun, dass er direkt eine Dokument1.doc aus der .dot macht, sobald ich diese mittels Doppelklick starte.

    Kann ich irgendwie das Makro von der Vorlage an die zu .doc Datei übergeben?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub AutoNew()
    3. On Error Resume Next
    4. ReplaceBookmarkText ActiveDocument, "counter", CStr(NummerHolen)
    5. End Sub
    6. Sub ReplaceBookmarkText(oDoc As Document, strBMName As String, strBMText As String)
    7. Dim rng As Range
    8. If oDoc.Bookmarks.Exists(strBMName) Then
    9. Set rng = oDoc.Bookmarks(strBMName).Range
    10. rng.Text = strBMText
    11. oDoc.Bookmarks.Add strBMName, rng
    12. Set rng = Nothing
    13. End If
    14. End Sub
    15. Private Function NummerHolen() As Long
    16. Dim pfad As String
    17. Dim f As Integer
    18. Dim s As String
    19. Dim Dateiname As String
    20. pfad = Application.ActiveDocument.Path
    21. If pfad = "" Then pfad = "C:\Users\memoanmichselbst\Desktop"
    22. Dateiname = pfad & "\Wert.txt"
    23. f = FreeFile
    24. If FileExists(Dateiname) Then
    25. Open Dateiname For Input As #f
    26. Line Input #f, s
    27. If IsNumeric(s) Then
    28. NummerHolen = CLng(s)
    29. End If
    30. Close #f
    31. NummerHolen = NummerHolen + 1
    32. Else
    33. NummerHolen = 1
    34. End If
    35. Open Dateiname For Output As #f
    36. Print #f, Str(NummerHolen)
    37. Close #f
    38. End Function
    39. Private Function FileExists(ByVal Dateiname) As Boolean
    40. If Dir(Dateiname) <> "" Then
    41. FileExists = True
    42. End If
    43. End Function


    So tuts :D
    Vielen lieben Dank.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Ein kleines Anliegen habe ich dochnoch.
    pfad = Application.ActiveDocument.Path
    scheint nicht so recht zu funktionieren.
    Er zieht sich immer den fix hinterlegten Pfad aus
    If pfad = "" Then pfad = "C:\Users\memoanmichselbst\Desktop"
    Was natürlich doof ist, da man so das Dokument nicht einfach kopieren kann.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Wenn Du eine neue Datei erstellst, dann hat diese noch keinen Pfad. Erst nach dem ersten Speichern ist ein Pfad vorhanden. Deswegen auch meine Abfrage auf einen gültigen Pfad.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Beim Drucken um eins erhöhen

    Hallo

    Ich habe ein ähnliches Problem und finde keine Lösung.

    Mein Dokument muss nicht beim öffnen um eins erhöht werden, sondern beim drucken.

    Man gibt also die Anzahl der Drucke in Word 2010 bei den Druckeinstellungen an und das Dokument wird dann immer mit der jeweiligen Nummer des aktuellen Druckes versehen.

    Kann man so etwas auch machen?
    In einem anderen Forum gabs noch keine passende Lösung und hoffe auf dieses hier.

    Gruß von der Nordsee

    Matthias





    EDIT:

    ERLEDIGT!

    Habe etwas cooles gefunden. Man muss einfach mal die Suche bei Google mit anderen Begriffen füttern! :P

    Hier mal der Link:

    web.archive.org/web/2007082305…obst/WordFAQ/Kollerat.htm

    Ich hoffe, dass der noch lange bleibt! Echt Super und funktioniert sehr gut.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Webbi76“ ()

    Hey,

    Webbi76 schrieb:

    ERLEDIGT!

    freut mich, dass du dein Problem noch lösen konntest. Allerdings solltest du bei künftigen Problemen darauf achten, keine Themen zu "missbrauchen", die schon seit gut 1 1/2 Jahren erledigt sind. Eröffne in solchen Fällen einfach ein neues Thema (und verweise ggfs. auf ähnliche Themen/Problemstellungen).

    --> Thema geschlossen

    Gruß (und noch viel Spaß im Forum) Manschula