Печатать серийный номер или инкрементный номер в нижнем колонтитуле документа Word

932
FreeSoftwareServers

Я чувствую, что это, скорее всего, дурак, но я не могу найти хорошие ответы, и «Вопрос, на который уже может быть ваш ответ», показывает только ответ для Excel.

Я пытаюсь отследить документы, напечатанные по серийному номеру или инкрементному номеру на каждом напечатанном документе.

Цель состоит в том, чтобы у нас был один документ, который является основным, а затем логи.

Я хочу, чтобы каждый журнал имел инкрементный / уникальный номер, и тогда люди могут записать этот уникальный номер в основной документ для удобной ссылки на соответствующий журнал.

Я нашел какой-то сложный VBA, но я не знаком с добавлением кода VBA в Word, и это кажется сложным, я подумал, что в word есть встроенная функция для этого, чего мне не хватает.

Я хочу, чтобы поле выглядело так:

Doc #: 1 

В следующий раз, когда мы распечатаем, это должно отображаться в нижнем колонтитуле

Doc #: 2 

и т. д.

Спасибо,

PS: Office 2013 - это то, что мы используем.

https://stackoverflow.com/questions/50769735/improving-vba-macro-in-word-to-automatically-create-file-relating-to-document-na

Вставить макрос в документ Word

Напечатать серийный номер или дополнительный номер в нижнем колонтитуле документа Word

https://stackoverflow.com/questions/48909968/running-a-macro-before-printing-a-word-document

0

1 ответ на вопрос

0
FreeSoftwareServers

Кажется, 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

Кроме того, вы захотите автоматизировать этот процесс, как только он заработает, как и ожидалось, в этом сообщении >> Запуск макроса перед печатью

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 («Сколько копий печатать?», «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 
Если кто-то хорош в VBA и не возражает протянуть руку помощи, я вижу возможности для улучшений. Я хочу добавить это к куче документов, которые не используют один и тот же файл settings.txt. Я хотел бы, чтобы файл `settings.txt` назывался` document_name.txt` и автоматически сохранялся в `document_location`. FreeSoftwareServers 5 лет назад 0
https://stackoverflow.com/questions/50769735/improving-vba-macro-in-word-to-automatically-create-file-relating-to-document-na FreeSoftwareServers 5 лет назад 0