Die VBA von Seem ist der richtige Weg, ich habe nur eine Lösung gefunden, die zu meinem Problem passt und funktioniert.
Methode 1: (Bevorzugt, da keine separate Textdatei zum Speichern der Dokumentseriennummer verwendet wird, sondern eine benutzerdefinierte Dokumenteigenschaft verwendet wird.)
Mein Blogbeitrag:
Wenn Sie sich mit Macros noch nicht auskennen, würde ich das Lesen des einfachen Begrüßungs-Makros - Word - Microsoft Office empfehlen.
Sie sollten diese Funktion auch automatisieren lassen, sobald sie wie erwartet über diesen Beitrag funktioniert. >> Makro vor dem Drucken ausführen - Word - Microsoft Office
https://www.freesoftwareservers.com/wiki/run-macro-vor-druckingword-microsoft-office-29982730.html
Hier ist mein Endprodukt, das für Sie "tragbar" ist:
Serial_Numbered_Doc_Template.docm
- Erstellen Sie zuerst eine "Custom Document-Eigenschaft" mit dem Namen "Counter" und setzen Sie den Anfangswert auf 0 (oder was auch immer).
In das Dokument einfügen, wo es beim Drucken erscheinen soll (Anweisungen finden Sie unter Link).
Drücken Sie Alt + F11, um den VBA-Editor zu öffnen und ein neues Modul zu erstellen
Sub FilePrint () D i i Long, j As Long mit ActiveDocument j = CLng (InputBox ("Wie viele Kopien sollen gedruckt werden?", "Print Copies")) Für i = 1 bis j mit .CustomDocumentProperties ("Counter"). Wert = .Value + 1 End mit .Fields.Update .PrintOut Next .Save End mit End Sub
Jetzt habe ich mein "EventClassModule" geändert, um beim Drucken automatisch dieses U-Boot aufzurufen:
Private Sub App_DocumentBeforePrint (ByVal Doc As Document, Abbrechen als Boolean) 'MsgBox "Before Print"' Begrüßung des Anrufs 'Call SerialNumber Cancel = True Call FilePrint End Sub
Methode 2:
Natürlich ist der auf der Website veröffentlichte Code nicht korrekt. Diesen finden Sie hier unter https://wordmvp.com/FAQs/MacrosVBA/NumberCopiesOf1Doc.htm
Das Problem ist, dass es dieses Code-Snippet haben muss:
' Display message, title, and default value. Dim SerialNumber As String NumCopies = Val(InputBox(Message, Title, Default)) SerialNumber = System.PrivateProfileString("W:\settings.txt", _ "MacroSettings", "SerialNumber")
Beachten Sie die Zeile, Dim SerialNumber As String
die NICHT auf der Website ist. Andernfalls wird der in dieser Frage gefundene Fehler angezeigt. >> https://stackoverflow.com/questions/48348049/vba-compile-error-expected-function-or-variable?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
Für die Nachwelt werde ich den Führer hier kopieren:
Beachten Sie auch, dass ich eine weitere Änderung vorgenommen habe, nämlich, dass auf der Site zwei Stellen für "settings.txt" angezeigt werden, einer jedoch "Settings.Txt" und der andere "Settings.txt". Ich habe es auf "settings.txt" umgestellt, da ich ein Linux-Typ bin und weiß, wie Kappen, Leerzeichen usw. Sie in Zukunft durcheinander bringen können.
---------------------------------------------
Erstellen Sie ein Lesezeichen, das SerialNumber
in dem Dokument benannt ist, in dem die Seriennummer angezeigt werden soll. Es kann sich in der Kopf- oder Fußzeile befinden, wenn Sie die Nummer dort möchten. Erstellen Sie dann ein Makro, das die folgenden Befehle enthält, um das Dokument zu drucken.
Sie werden nach der Anzahl der Kopien gefragt, die Sie erstellen möchten, und jede Kopie wird fortlaufend nummeriert. Wenn dieses Makro zum ersten Mal ausgeführt wird, wird die erste Kopie mit 1 nummeriert. Wenn die Ausführung abgeschlossen ist, wird die Anzahl der Kopien in einer Datei "Settings.Txt" gespeichert ist eine Nummer mehr als die Nummer auf der letzten Kopie. Bei der nächsten Ausführung des Makros beginnt die Nummerierung der Kopien ab dieser Nummer. Wenn Sie beim ersten Start mit einer anderen Zahl als 1 beginnen möchten, führen Sie das Makro aus, geben Sie als Anzahl der Kopien 1 ein, und öffnen Sie die Datei Settings.Txt. Ersetzen Sie die Nummer in der Datei durch die gewünschte Nummer Wenn Sie möchten, dass die Serie bei einer bestimmten Nummer beginnt, können Sie diese Datei öffnen und die Nummer darin durch die Nummer ersetzen, die Sie als erste in der Serie verwenden möchten.
Sub SerialNumber() ' ' SerialNumber Macro ' ' Dim Message As String, Title As String, Default As String, NumCopies As Long Dim Rng1 As Range ' Set prompt. Message = "Enter the number of copies that you want to print" ' Set title. Title = "Print" ' Set default. Default = "1" ' Display message, title, and default value. Dim SerialNumber As String NumCopies = Val(InputBox(Message, Title, Default)) SerialNumber = System.PrivateProfileString("W:\settings.txt", _ "MacroSettings", "SerialNumber") If SerialNumber = "" Then SerialNumber = 1 End If Set Rng1 = ActiveDocument.Bookmarks("SerialNumber").Range Counter = 0 While Counter < NumCopies Rng1.Delete Rng1.Text = SerialNumber ActiveDocument.PrintOut SerialNumber = SerialNumber + 1 Counter = Counter + 1 Wend 'Save the next number back to the Settings.txt file ready for the next use. System.PrivateProfileString("W:\settings.txt", "MacroSettings", _ "SerialNumber") = SerialNumber 'Recreate the bookmark ready for the next use. With ActiveDocument.Bookmarks .Add Name:="SerialNumber", Range:=Rng1 End With End Sub
Hinweis: Sie können / sollten wahrscheinlich den Ort von "settings.txt" in den von Ihrem LAN bevorzugten Ort ändern!
einstellungen.txt
[MacroSettings] SerialNumber=1