遇到一个比较大的订单需要打印唛头,一单货分为了30多箱出货,现需要依次为木箱打印唛头,一个箱子的唛头占用一页,将所有唛头编辑出来同时打印的话就是一份30多页的文档,但每页文档之间只有序号的差异,唛头格式如下,内容较为简单,之所以占据一页,是为了打出来看着醒目:
产品名称
箱号:32-1,2,3...32
利用vba实现自动箱号
遇到这类有规律的工作,利用vba来解决是一个比较好的方案,刚好自己曾经实现过word自动打印测试证书的序列号,刚好可以拿来复用:
Sub autoNumber()
Dim posX As Double
Dim posY As Double
Dim leftWord As String
Dim rightWord As String
Dim startNumber As String
Dim count As Integer
Dim s1 As Shape
posX = Selection.Information(wdHorizontalPositionRelativeToPage)
posY = Selection.Information(wdVerticalPositionRelativeToPage)
leftWord = "32-" '序列号前缀
startNumber = "1"
rightWord = "" '序列号后缀
count = 1 '序列号的个数
For i = 1 To count
Set s1 = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, posX, posY, Selection.Font.Size 8, Selection.Font.Size 1.5)
s1.TextFrame.TextRange.Font.Size = Selection.Font.Size
s1.TextFrame.TextRange.Font.Name = Selection.Font.Name
s1.TextFrame.TextRange.Font.Bold = True
s1.Line.ForeColor.TintAndShade = 1
s1.TextFrame.MarginBottom = 0
s1.TextFrame.MarginTop = 0
s1.ZOrder (msoSendBehindText)
s1.TextFrame.TextRange.Text = leftWord & startNumber + i - 1 & rightWord
'打印前先在word内进行打印设置,如打印机,页数等
'下面的语句仅针对当前页进行打印输出
'打印后删除已有的文本框避免数据重叠
'如需要测试文本框位置是否准确,请先注释掉下面两句
'注释的方法为在语句最前方加一个如同本条语句一样的单引号
ActiveDocument.PrintOut , , wdPrintCurrentPage
s1.Delete
Next i
End Sub
程序会自动沿用光标所在处的自体与文字大小设置,因为这次是需要打印“32-1、2、3...”这样的形式,打印时只需要设置一下序列号前缀为“32-”就可以了,注释掉最后两句语句,将光标停留在需要生成序列号的位置,运行程序测试了一下,发现文字y方向有点偏上,于是将y坐标增加了8:
Set s1 = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, posX, posY + 8, Selection.Font.Size 8, Selection.Font.Size 1.5)
vba宏程序的编辑
vba宏程序在word中会导致安全性问题,部分电脑打开一个包含宏程序的word文档时会引发安全警告,只有点击提示位置的“选项”按钮,在弹出窗口选择“启用此内容”后,宏程序才能正常执行,需要编辑宏程序的时候,可以按快捷键alt+f11进入编辑窗口。
vba宏程序的运行
在word2007版本中,宏程序的菜单项位于视图菜单的尾部,点击后在弹出窗口中选择正确的宏程序名称,点击右侧“运行”按钮即可,在这个页面同样可以进入编辑宏程序的页面,只是菜单位置较深,没有快捷键alt+f11来的方便。
vba宏程序的实例
这里提供了一份word唛头箱号自动打印的示例文件供有兴趣的朋友参考:
箱号自动打印实例 提取码: n8n8
视频链接
设置百度账户的时候发现自己还传过一个视频,顺手放博文下方供参考了。
博主上传于百度经验的相关视频