
Acho que isso provavelmente é uma bobagem, mas não consigo encontrar boas respostas e "Perguntas que já podem ter sua resposta" mostram apenas uma resposta para Excel.
Estou procurando rastrear documentos impressos com um número de série, também conhecido como número incremental, em cada documento impresso.
O objetivo é que tenhamos um documento que seja o mestre e depois registre.
Quero que cada log tenha um número incremental/exclusivo e então as pessoas possam escrever esse número exclusivo no documento mestre para facilitar a referência ao log correspondente.
Tenho encontrado alguns VBA complicados, mas não estou familiarizado com a adição de código VBA ao Word e isso parece complicado. Achei que o Word tinha uma função integrada para isso que estou perdendo.
Quero que o campo fique assim:
Doc #: 1
Da próxima vez que imprimirmos, ele deverá aparecer no rodapé
Doc #: 2
etc etc.
Obrigado,
PS: O Office 2013 é atualmente o que usamos.
Incorporar macro no documento Word
Imprimir número de série ou número de incremento no rodapé do documento do Word
https://stackoverflow.com/questions/48909968/running-a-macro-before-printing-a-word-document
Responder1
O VBA do Seem é o caminho a percorrer, só encontrei uma solução que se adapta ao meu problema e funciona.
Método 1:(Este método torna o documento portátil, mas não possui números exclusivos para cada documento)
Serial_Numbered_Doc_Template.docm
Primeiro crie uma "Propriedade de documento personalizada" chamada "Contador" e defina o valor inicial como 0 (ou qualquer outro).
Insira no documento onde deseja que fique quando impresso (CTRL + F9)
Este módulo aumentará o número em um cada vez que o módulo for chamado:
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
- Agora modifiquei meu "EventClassModule" para chamar automaticamente este sub ao imprimir:
Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
' MsgBox "Before Print"
' Call Greeting
' Call SerialNumber
Cancel = True
Call FilePrint
End Sub
Método 2:(Este método usa um arquivo para rastrear o número de série que tem a vantagem de ter vários documentos do Word compartilhando as mesmas configurações/log de atualização e cada documento do Word deve ter um número exclusivo)
Eu segui este guia encontrado aqui ->
https://wordmvp.com/FAQs/MacrosVBA/NumberCopiesOf1Doc.htm
Claro que o código postado no site está incorreto...
O problema é que ele precisa ter este trecho de código:
' Display message, title, and default value.
Dim SerialNumber As String
NumCopies = Val(InputBox(Message, Title, Default))
SerialNumber = System.PrivateProfileString("C:\settings.txt", "MacroSettings", "SerialNumber")
Observe a linha Dim SerialNumber As String
que NÃO está no site. Sem ele, você obterá o erro encontrado nesta questão >>
https://stackoverflow.com/questions/48348049/vba-compile-error-expected-function-or-variable
Para a posteridade, copiarei o guia aqui:
Observe também que fiz outra alteração: o site mostra dois locais para "settings.txt", mas um é "Settings.Txt" e o outro é "Settings.txt". Mudei para "settings.txt" porque sou um cara do Linux e sei como letras maiúsculas e espaços etc. podem atrapalhar você no futuro.
------------------------------------------------`
Crie um marcador nomeado SerialNumber
no documento onde deseja que o número de série apareça. Pode estar no cabeçalho ou rodapé, se for onde você deseja o número. Em seguida, crie uma macro contendo os seguintes comandos para imprimir o documento.
Ele solicitará o número de cópias que você deseja fazer e numerará sequencialmente cada cópia. Na primeira vez que esta macro for executada, a primeira cópia será numerada 1 e quando terminar a execução armazenará em um arquivoSettings.Txt o número que é mais um que o número da última cópia. Na próxima vez que a macro for executada, ela começará a numerar as cópias a partir desse número. Se, ao iniciar pela primeira vez, você quiser que os números comecem com algum número diferente de 1, execute a macro, inserindo 1 como o número de cópias e, em seguida, abra o arquivo Settings.Txt e substitua o número no arquivo pelo número desejado como o primeiro da série. A qualquer momento depois disso, se desejar que a série comece em um número específico, você pode abrir esse arquivo e substituir o número nele pelo número que deseja que seja o primeiro da série.
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
Nota: Você provavelmente pode/deve alterar o local de "settings.txt" para o local preferido da sua LAN!
settings.txt
[MacroSettings]
SerialNumber=1