Кажется, VBA - это путь, я нашел только одно решение, которое подходит для моей проблемы и работает.
Способ 1: (предпочтительнее, поскольку он не использует отдельный текстовый файл для хранения серийного номера документа, а вместо этого использует пользовательское свойство документа)
Смотрите >> https://stackoverflow.com/questions/50769735/improving-vba-macro-in-word-to-automatics-create-file-relating-to-document-na/50772002#50772002
Мой пост в блоге:
https://www.freesoftwareservers.com/wiki/adding-serial-number-or-incremental-number-to-word-document-at-print-time-29982743.html
Я бы порекомендовал прочитать через «Создать простой приветствующий макрос - Word - Microsoft Office», если вы новичок в макросах.
https://www.freesoftwareservers.com/wiki/create-simple-greeting-macro-word-microsoft-office-29982727.html
Кроме того, вы захотите автоматизировать этот процесс, как только он заработает, как и ожидалось, в этом сообщении >> Запуск макроса перед печатью - Word - Microsoft Office
https://www.freesoftwareservers.com/wiki/run-macro-before-printing-word-microsoft-office-29982730.html
Вот мой конечный продукт, который "портативный" для вас:
https://confluence.freesoftwareservers.com/download/attachments/29982743/Serial_Numbered_Doc_Template.docm?version=1&modificationDate=1528691713060&api=v2
Serial_Numbered_Doc_Template.docm
- Сначала создайте "Пользовательское свойство документа" с именем "Счетчик" и установите начальное значение в 0 (или что-то еще).
https://www.freesoftwareservers.com/wiki/creating-custom-document-property-in-microsoft-office-word-29982751.html
Вставьте в документ, где вы хотите, чтобы он был при печати (инструкции см. В ссылке)
Нажмите Alt+F11, чтобы открыть VBA Editor и создать новый модуль.
Sub FilePrint () Dim i As Long, j As Long с ActiveDocument j = CLng (InputBox ("Сколько копий нужно напечатать?""," Печать копий ")) Для i = 1 К j С.CustomDocumentProperties ("Счетчик").Значение =.Значение + 1 конец с.Поля.Обновить .РаспечататьOut Next.Сохранить конец с конца 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», но одно - "Настройки".Txt ", а другой" Settings.txt ". Я переключил его на «settings.txt», так как я парень из Linux и знаю, как пробелы, пробелы и т.д. Могут испортить вас в будущем.
------------------------------------------------ `
Создайте закладку с именем SerialNumber
в документе, где вы хотите, чтобы серийный номер появился. Это может быть в верхнем или нижнем колонтитуле, если это то место, где вы хотите номер. Затем создайте макрос, содержащий следующие команды, чтобы напечатать документ.
Он запросит количество копий, которое вы хотите сделать, и последовательно пронумерует каждую копию.При первом запуске этого макроса первая копия будет пронумерована 1, а по окончании будет сохранена в aSettings.Txt файл номер, который на один номер больше, чем номер в последней копии.При следующем запуске макроса начнется нумерация копий с этого номера. Если при первом запуске вы хотите, чтобы числа начинались с некоторого числа, отличного от 1, запустите макрос, введя 1 в качестве количества копий, а затем откройте «Настройки».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