我觉得这很可能是重复的,但我找不到好的答案,“可能已经有答案的问题”只显示了 excel 的答案。
我希望通过在每个打印的文档上使用序列号(也就是递增的数字)来跟踪打印的文档。
我们的目标是有一个主文档,然后记录它。
我希望每个日志都有一个增量/唯一的编号,然后人们可以在主文档上写上该唯一的编号,以便于参考相应的日志。
我一直在寻找一些复杂的 VBA,但我不熟悉如何向 Word 添加 VBA 代码,而且这看起来很复杂,我想 Word 有一个我所缺少的内置函数。
我希望该字段看起来像这样:
Doc #: 1
下次打印时它应该显示在页脚中
Doc #: 2
等等等等。
谢谢你,
PS:我们目前使用的是Office 2013。
https://stackoverflow.com/questions/48909968/running-a-macro-before-printing-a-word-document
答案1
看来 VBA 是可行的方法,我只找到了一个适合我的问题并且有效的解决方案。
方法 1:(这种方法使文档可移植,但每个文档没有唯一的编号)
序列编号文档模板.docm
首先创建一个名为“Counter”的“自定义文档属性”,并将初始值设置为 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,运行完毕后,它会将比上一个副本的编号多 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”的位置更改为您的 LAN 首选位置!
settings.txt
[MacroSettings]
SerialNumber=1