
Siento que esto probablemente sea una duplicación, pero no puedo encontrar buenas respuestas y "Preguntas que quizás ya tengan su respuesta" solo muestra una respuesta para Excel.
Estoy buscando realizar un seguimiento de los documentos impresos teniendo un número de serie, también conocido como un número incremental, en cada documento impreso.
El objetivo es que tengamos un documento que sea el maestro y luego los registros.
Quiero que cada registro tenga un número incremental/único y luego las personas puedan escribir ese número único en el documento maestro para consultar fácilmente el registro correspondiente.
He estado encontrando algo de VBA complicado, pero no estoy familiarizado con agregar código VBA a Word y eso parece complicado, pensé que Word tiene una función incorporada para esto que me falta.
Quiero que el campo se vea así:
Doc #: 1
La próxima vez que imprimamos debería aparecer en el pie de página.
Doc #: 2
etcétera etcétera.
Gracias,
PD: Office 2013 es lo que usamos actualmente.
Incrustar macro en un documento de Word
Imprimir número de serie o número incremental en el pie de página de un documento de Word
https://stackoverflow.com/questions/48909968/ejecutar-a-macro-antes-de-imprimir-un-documento-de-word
Respuesta1
VBA de Seem es el camino a seguir, solo encontré una solución que se adapta a mi problema y funciona.
Método 1:(Este método hace que el documento sea portátil, pero no tiene números únicos para cada documento)
Plantilla_doc_numerada_de_serie.docm
Primero cree una "Propiedad de documento personalizado" llamada "Contador" y establezca el valor inicial en 0 (o lo que sea).
Insertar en el documento donde desea que esté cuando se imprima (CTRL + F9)
Este módulo incrementará el número en uno cada vez que se llame al módulo:
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
- Ahora modifiqué mi "EventClassModule" para llamar automáticamente a este sub al 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 utiliza un archivo para rastrear el número de serie, lo que tiene la ventaja de que varios documentos de Word comparten la misma configuración/registro de actualización y cada documento de Word debe tener un número único).
Seguí esta guía que se encuentra aquí -->
https://wordmvp.com/FAQs/MacrosVBA/NumberCopiesOf1Doc.htm
Por supuesto, el código publicado en el sitio es incorrecto...
El problema es que necesita tener este fragmento 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")
Tenga en cuenta la línea Dim SerialNumber As String
que NO está en el sitio web. Sin él, aparece el error que se encuentra en esta pregunta >>
https://stackoverflow.com/questions/48348049/vba-compile-error-expected-function-or-variable
Para la posteridad, copiaré la guía aquí:
También tenga en cuenta que hice otro cambio: el sitio muestra dos lugares para "settings.txt", pero uno es "Settings.Txt" y el otro es "Settings.txt". Lo cambié a "settings.txt" porque soy un experto en Linux y sé cómo las mayúsculas y los espacios, etc., pueden arruinarte en el futuro.
------------------------------------------------`
Cree un marcador con el nombre SerialNumber
del documento donde desea que aparezca el número de serie. Puede estar en el encabezado o pie de página si es ahí donde desea el número. Luego cree una macro que contenga los siguientes comandos para imprimir el documento.
Le pedirá la cantidad de copias que desea realizar y numerará secuencialmente cada copia. La primera vez que se ejecute esta macro, la primera copia se numerará 1 y cuando termine de ejecutarse, almacenará en un archivo Settings.Txt el número que es uno más que el número de la última copia. La próxima vez que se ejecute la macro, comenzará a numerar las copias a partir de ese número. Si cuando comienza por primera vez, desea que los números comiencen en algún número que no sea 1, ejecute la macro, ingrese 1 como número de copias y luego abra el archivo Settings.Txt y reemplace el número en el archivo con el número que desee. como el primero de la serie. En cualquier momento posterior, si desea que la serie comience en un número particular, puede abrir ese archivo y reemplazar el número que contiene con el número que desea que sea el primero de la serie.
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: ¡Probablemente puedas/deberías cambiar la ubicación de "settings.txt" a tu ubicación preferida de LAN!
settings.txt
[MacroSettings]
SerialNumber=1