
Я думаю, что это, скорее всего, дубликат, но я не могу найти хороших ответов, а «Вопросы, на которые, возможно, уже есть ваш ответ» показывает только ответ для Excel.
Я хочу отслеживать напечатанные документы, присваивая каждому напечатанному документу серийный номер, т.е. увеличивающийся номер.
Цель состоит в том, чтобы у нас был один документ, который является главным и который затем регистрируется.
Я хочу, чтобы каждый журнал имел инкрементный/уникальный номер, и чтобы люди могли записать этот уникальный номер в главный документ для легкой ссылки на соответствующий журнал.
Я находил несколько сложных примеров кода VBA, но я не знаком с добавлением кода VBA в Word, и это кажется сложным. Я подумал, что в Word есть встроенная функция для этого, которой мне не хватает.
Я хочу, чтобы поле выглядело так:
Doc #: 1
В следующий раз при печати это должно отобразиться в нижнем колонтитуле.
Doc #: 2
и т.д. и т.п.
Спасибо,
PS: В настоящее время мы используем Office 2013.
Встроить макрос в документ Word
Печать серийного номера или инкрементного номера в нижнем колонтитуле документа Word
https://stackoverflow.com/questions/48909968/запуск-макроса-перед-печатью-документа-слова
решение1
VBA от Seem — это выход, я нашел только одно решение, которое подходит для моей проблемы и работает.
Метод 1:(Этот метод делает документ переносимым, но не имеет уникальных номеров для каждого документа)
Шаблон_документа_с_серийным_номером.docm
Сначала создайте «Пользовательское свойство документа» с именем «Счетчик» и установите начальное значение 0 (или любое другое).
Вставьте в документ то место, где вы хотите, чтобы он был напечатан (CTRL + F9)
Этот модуль будет увеличивать число на единицу каждый раз при вызове модуля:
Sub FilePrint()
Dim i As Long, j As Long
With ActiveDocument
j = CLng(InputBox("How many copies to print?", "Print Copies"))
For i = 1 To j
With .CustomDocumentProperties("Counter")
.Value = .Value + 1
End With
.Fields.Update
ActiveDocument.PrintOut Copies:=1
Next
.Save
End With
End Sub
- Теперь я изменил свой «EventClassModule» для автоматического вызова этой подпрограммы при печати:
Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
' MsgBox "Before Print"
' Call Greeting
' Call SerialNumber
Cancel = True
Call FilePrint
End Sub
Метод 2:(Этот метод использует файл для отслеживания серийного номера, что имеет то преимущество, что несколько документов Word используют один и тот же журнал настроек/обновлений, и каждый документ Word должен иметь уникальный номер)
Я следовал этому руководству, которое можно найти здесь -->
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("C:\settings.txt", "MacroSettings", "SerialNumber")
Обратите внимание на строку Dim SerialNumber As String
, которой НЕТ на сайте. Без нее вы получите ошибку, найденную в этом вопросе >>
https://stackoverflow.com/questions/48348049/vba-compile-error-expected-function-or-variable
Для потомков я скопирую руководство сюда:
Также обратите внимание, что я сделал еще одно изменение, а именно, что сайт показывает два места для "settings.txt", но одно - "Settings.Txt", а другое - "Settings.txt". Я переключил его на "settings.txt", поскольку я работаю с Linux и знаю, как заглавные буквы и пробелы и т. д. могут испортить вам жизнь в будущем.
------------------------------------------------`
Создайте закладку с именем SerialNumber
в документе, где вы хотите, чтобы отображался серийный номер. Это может быть верхний или нижний колонтитул, если вы хотите, чтобы номер был там. Затем создайте макрос, содержащий следующие команды для печати документа.
Он запросит количество копий, которые вы хотите сделать, и последовательно пронумерует каждую копию. При первом запуске этого макроса первая копия будет иметь номер 1, а когда он закончит работу, он сохранит в файле Settings.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