打印副本号(Microsoft Word)
在商业环境中,打印文档的多个副本并不罕见。有时,对副本编号是有益的。例如,第一个副本将具有(也许在页眉或页脚中)文本“ Copy 1”,第二个副本将具有“ Copy 2”,最多可包含多少副本。
当然,一种选择是打印文档的各个副本,然后在每次打印之间对副本编号进行编辑。这变得乏味,快速。您可能还希望利用顺序编号字段(如其他_WordTips_中所述),并使副本数等于您需要打印的数量。因此,如果您必须打印25份,则只需复制整个文档(包括顺序编号字段),移至文档末尾,然后再粘贴24次。但是,这使整个文档相当庞大,并且有更简单的方法来解决该问题。
解决此问题的最简单方法(缺少使用宏)可能是简单地使用Word的邮件合并功能。您将使用一个简单的数据源,其中包含要分配给每个副本的编号。然后,将合并字段放在文档中的适当位置,然后运行合并。每个副本将包含所需的副本编号。使用这种方法的额外好处是,您可以根据需要在合并中使用其他信息。例如,如果文档的每个副本都分配给一个特定的人,则只需在数据源中简单地添加另一个数据字段,其中包含要接收该副本的人的姓名。然后,您也可以在每个合并的文档中打印该人的姓名。
如果愿意,可以使用宏来打印编号的副本。
例如,下面的宏询问您要打印多少份,以及要使用的起始份数。 (如果您打印25份,然后有人要求您打印第二批10份,编号从26到35,这非常方便。)该宏还存储了会话之间的最后一份副本,因此将其用作默认值当您下次运行宏时。
Public Sub PrintNumberedCopies1() Dim varItem As Variable Dim bExists As Boolean Dim lCopiesToPrint As Long Dim lCounter As Long Dim lCopyNumFrom As Long ' ensure our doc variable exists bExists = False For Each varItem In ActiveDocument.Variables If varItem.Name = "CopyNum" Then bExists = True Exit For End If Next varItem ' initialize document variable if doesn't exist If Not bExists Then ActiveDocument.Variables.Add _ Name:="CopyNum", Value:=0 End If ' ask how many to print lCopiesToPrint = InputBox( _ Prompt:="How many copies?", _ Title:="Print And Number Copies", _ Default:="1") ' ask where to start numbering lCopyNumFrom = CLng(InputBox( _ Prompt:="Number at which to start numbering copies?", _ Title:="Print And Number Copies", _ Default:=CStr(ActiveDocument.Variables("CopyNum") + 1))) ' loop through the print-write-print cycle For lCounter = 0 To lCopiesToPrint - 1 ' update the document variable ActiveDocument.Variables("CopyNum") = _ lCopyNumFrom + lCounter ' print this numbered copy ActiveDocument.PrintOut Copies:=1 Next lCounter End Sub
为了使用此宏,您还需要执行其他两项操作。
首先,您需要在文档中指出您希望副本号出现的位置。在应该打印的位置,只需插入以下字段(请记住,通过按Ctrl + F9插入字段括号):
{ DOCVARIABLE "CopyNum" }
您需要做的第二件事是确保已配置Word,以便它在打印时更新字段。现在,当您运行宏时,系统将询问您要打印多少份以及要使用的起始编号。 document变量将更新,并打印文档的单个副本。这些步骤会重复执行您选择打印的次数。
不幸的是,此宏解决方案不能在Word的所有版本中使用。例如,如果将DOCVARIABLE字段放在Word 97文档的标题中,然后打印该文档,Word将立即崩溃。
如何解决这个问题?只需使用其他方法即可。 (如果没有灵活性,Word将一无所获。)以下宏可在所有现代版本的Word中使用。它是较早版本的一种变体,它依赖于使用自定义文档属性而不是文档变量。
Public Sub PrintNumberedCopies2() Dim varItem As DocumentProperty Dim bExists As Boolean Dim lCopiesToPrint As Long Dim lCounter As Long Dim lCopyNumFrom As Long ' ensure our doc variable exists bExists = False For Each varItem In ActiveDocument.CustomDocumentProperties If varItem.Name = "CopyNum" Then bExists = True Exit For End If Next varItem ' initialize document variable if doesn't exist If Not bExists Then ActiveDocument.CustomDocumentProperties.Add _ Name:="CopyNum", LinkToContent:=False, _ Type:=msoPropertyTypeNumber, Value:=0 End If ' ask how many to print lCopiesToPrint = InputBox( _ Prompt:="How many copies?", _ Title:="Print And Number Copies", _ Default:="1") ' ask where to start numbering lCopyNumFrom = CLng(InputBox( _ Prompt:="Number at which to start numbering copies?", _ Title:="Print And Number Copies", _ Default:=CStr(ActiveDocument.CustomDocumentProperties("CopyNum") + 1))) ' loop through the print-write-print cycle For lCounter = 0 To lCopiesToPrint - 1 ' update the document variable ActiveDocument.CustomDocumentProperties("CopyNum") = _ lCopyNumFrom + lCounter ' print this numbered copy ActiveDocument.PrintOut Copies:=1 Next lCounter End Sub
为了使用此宏,您还需要执行其他两项操作。
首先,您需要在文档中指出您希望副本号出现的位置。在应该打印的位置,只需插入以下字段(请记住,通过按Ctrl + F9插入字段括号):
{ DOCPROPERTY "CopyNum" }
首次插入该字段时,您可能会看到该字段返回的错误消息,例如“错误!未知的文档属性名称”。不用担心运行宏后,它将消失并由正确的副本号代替。
您需要做的第二件事是确保已配置Word,以便它在打印时更新字段。现在,当您运行宏时,系统将询问您要打印多少份以及要使用的起始编号。 document变量将更新,并打印文档的单个副本。这些步骤会重复执行您选择打印的次数。
注意:
如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。
_WordTips_是您进行经济有效的Microsoft Word培训的来源。
(Microsoft Word是世界上最流行的文字处理软件。)本技巧(844)适用于Microsoft Word 97、2000、2002和2003。您可以为Word(Word 2007)的功能区界面找到此技巧的版本。和更高版本)在这里: