Кажется, VBA - это путь, я нашел только одно решение, которое подходит для моей проблемы и работает.
Способ 1: (предпочтительнее, поскольку он не использует отдельный текстовый файл для хранения серийного номера документа, а вместо этого использует пользовательское свойство документа)
Мой пост в блоге:
Я бы порекомендовал прочитать через «Создать простой приветствующий макрос - Word - Microsoft Office», если вы новичок в макросах.
Кроме того, вы захотите автоматизировать этот процесс, как только он заработает, как и ожидалось, в этом сообщении >> Запуск макроса перед печатью
Вот мой конечный продукт, который «портативный» для вас:
Serial_Numbered_Doc_Template.docm
- Сначала создайте «Пользовательское свойство документа» с именем «Счетчик» и установите начальное значение в 0 (или что-то еще).
Вставьте в документ, где вы хотите, чтобы он был при печати (инструкции см. В ссылке)
Нажмите Alt + F11, чтобы открыть VBA Editor и создать новый модуль.
Sub FilePrint () Dim i As Long, j As Long с ActiveDocument j = CLng (InputBox («Сколько копий печатать?», «Print Copies»)) Для i = 1 To j с .CustomDocumentProperties («Counter»). Значение = .Value + 1 Заканчивается на .Fields.Update .PrintOut Далее. Сохранение заканчивается на End Sub
Теперь я изменил свой EventClassModule для автоматического вызова этого саба при печати:
Private Sub App_DocumentBeforePrint (ByVal Doc как документ, Cancel как логическое значение) 'MsgBox "Before Print"' Приветствие вызова 'Call SerialNumber Cancel = True Call FilePrint End Sub
Способ 2:
Разумеется, код, размещенный на сайте, неверен, его можно найти здесь @ https://wordmvp.com/FAQs/MacrosVBA/NumberCopiesOf1Doc.htm.
Проблема в том, что он должен иметь следующий фрагмент кода:
' Display message, title, and default value. Dim SerialNumber As String NumCopies = Val(InputBox(Message, Title, Default)) SerialNumber = System.PrivateProfileString("W:\settings.txt", _ "MacroSettings", "SerialNumber")
Обратите внимание на строку, Dim SerialNumber As String
которой нет на сайте. Без этого вы получите ошибку, найденную в этом вопросе >> 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
Для потомков я скопирую руководство здесь:
Также обратите внимание, что я сделал еще одно изменение: сайт показывает два места для «settings.txt», но одно - «Settings.Txt», а другое - «Settings.txt». Я переключил его на «settings.txt», так как я парень из Linux и знаю, как пробелы, пробелы и т. Д. Могут испортить вас в будущем.
------------------------------------------------ `
Создайте закладку с именем SerialNumber
в документе, где вы хотите, чтобы серийный номер появился. Это может быть в верхнем или нижнем колонтитуле, если это то место, где вы хотите номер. Затем создайте макрос, содержащий следующие команды, чтобы напечатать документ.
Он запросит количество копий, которое вы хотите сделать, и последовательно пронумерует каждую копию. При первом запуске этого макроса первая копия будет пронумерована 1, а когда она завершится, она сохранит в файле aSettings.Txt номер, который это еще один номер последней копии. При следующем запуске макроса начнется нумерация копий с этого номера. Если при первом запуске вы хотите, чтобы числа начинались с некоторого числа, отличного от 1, запустите макрос, введя 1 в качестве количества копий, а затем откройте файл Settings.Txt и замените число в файле на нужное вам число. как первый в серии. В любое время после этого, если вы хотите, чтобы серия начиналась с определенного номера, вы можете открыть этот файл и заменить номер в нем номером, который вы хотите быть первым в серии.
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
Примечание: вы можете / должны, вероятно, изменить местоположение «settings.txt» на предпочитаемое вами местоположение в локальной сети!
settings.txt
[MacroSettings] SerialNumber=1