首页>工作相关>word自动打印序列号

word自动打印序列号

平时工作中Word用的不多,有一次遇到一个需要打印连号的测试文件。每次打印之前,都要去文档的固定位置将序列号增加1位。老老实实把100多张纸打完,心想下回这数量后面再给加个0,那得花多长时间啊?偷懒的心思一起,思路立马宽广了许多,浏览了一遍word提供的模块,感觉文本框就挺合适,既有尺寸位置等数据可以设置,又没有多余的装饰。

word_auto_sn

利用vba创建一个简单的文本框

    Sub createBox()
    Dim s1 As Shape
    Set s1 = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, 30, 30, 90, 90)
    s1.TextFrame.TextRange.Text = "欢迎来到虾比比!"
    End Sub

确定了对象,还需要解决序列号的定位问题,因为只需要打印一个序列号,也就意味着只需要一个准确的位置就可以了。Word里的Selection对象是个好东西,不但免费提供了鼠标停留位置的坐标,还赠送了当前位置的字体与字号。

利用Selection获取信息

    Sub createBox()
    Dim s1 As Shape
    Dim posX As Double
    Dim posY As Double
    posX = Selection.Information(wdHorizontalPositionRelativeToPage)
    posY = Selection.Information(wdVerticalPositionRelativeToPage)
    Set s1 = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, posX, posY, 90, 90)
    s1.TextFrame.TextRange.Font.Size = Selection.Font.Size
    s1.TextFrame.TextRange.Font.Name = Selection.Font.Name
    s1.TextFrame.TextRange.Text = "欢迎来到虾比比!"
    End Sub

成功定位了序列号,也自动得到当前的字体格式。再去掉边框稍微修饰一下,这个文本框就是一行合格的序列号了。以下几行语句用于去除边框,清空文本框的上下边距,以及把文本框的深度置于文字之后。

文本框简单装修

    s1.Line.ForeColor.TintAndShade = 1
    s1.TextFrame.MarginBottom = 0
    s1.TextFrame.MarginTop = 0
    s1.ZOrder (msoSendBehindText)

序列号自动打印完整程序

Sub autoSN()
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 = ""                                                     '序列号前缀
startNumber = "200000"                                            '序列号数字部分
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.Line.ForeColor.TintAndShade = 1
    s1.TextFrame.MarginBottom = 0
    s1.TextFrame.MarginTop = 0
    s1.ZOrder (msoSendBehindText)
    s1.TextFrame.TextRange.Text = leftWord & startNumber + i - 1 & rightWord
    ActiveDocument.PrintOut                                       '输出打印机
    s1.Delete                                                     '删除文本框
Next i
End Sub

程序的运行逻辑如下,首先在光标位置生成一个文本框,自动设置格式后输出打印,提交打印后删除自身,序列号增加1,循环直至满足程序中“count”变量中所规定次数。需要注意的是,运行程序前需要预先对打印的页数、页面等进行设置。

补充

有字体加粗需求的,可以加上这么一行:

    s1.TextFrame.TextRange.Font.Bold = True
有时候文档不止一页,但仅需要输出当前变更序列号的页面:
    ActiveDocument.PrintOut , , wdPrintCurrentPage
于是程序也可以修改为如下:
    Sub autoSN()  
    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 = ""                                                     '序列号前缀
    startNumber = "1234567"                                           '序列号数字部分
    rightWord = ""                                                    '序列号后缀
    count = 2                                                         '设置一共有几个序列号
    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 = "Calibri"
        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
        ActiveDocument.PrintOut , , wdPrintCurrentPage                '输出打印机
        s1.Delete                                                     '删除文本框
    Next i
    End Sub

前置的零

有时候三位数序列号从1开始,需要填充两个0,10以上的则需要填充1个0,这里提供了一个参考:

Sub autoSN()

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)
leftWord1 = "00"  '序列号前缀
leftWord2 = "0"
leftWord3 = ""

count = 12 '序列号的个数

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 = "arial"
s1.TextFrame.TextRange.Font.Bold = False
s1.Line.ForeColor.TintAndShade = 1
s1.TextFrame.MarginBottom = 0
s1.TextFrame.MarginTop = 0
s1.ZOrder (msoSendBehindText)
If i < 10 Then
    s1.TextFrame.TextRange.Text = leftWord1 & i
ElseIf i < 100 Then
    s1.TextFrame.TextRange.Text = leftWord2 & i
Else
    s1.TextFrame.TextRange.Text = leftWord3 & i
End If
'打印前先在word内进行打印设置,如打印机,页数等
'下面的语句仅针对当前页进行打印输出
'打印后删除已有的文本框避免数据重叠
'如需要测试文本框位置是否准确,请先注释掉下面两句
'注释的方法为在语句最前方加一个如同本条语句一样的单引号
ActiveDocument.PrintOut , , wdPrintCurrentPage
s1.Delete
Next i

End Sub

标签: office

移动端可扫我直达哦~

推荐阅读

office 2025-03-25

惊!下载文件时看不到桌面文件夹~

家里的电脑不知何时开始变成了这样,下载保存的时候看不到桌面,保存文件只能选c、d、e、f盘,觉得有点麻烦,但又不觉得麻烦到无法忍受,所以一直拖延至今。你看,不光人心中的成见是一座大山,除了成见山,还有懒惰山拖延山畏难山。解决办法出乎意...

工作相关 office

office 2025-03-25

如何利用ai自动智能生成ppt

需要一个数学三门问题的讲解用ppt,自己对做ppt苦手,最近ai应用又层出不穷,就想着能不能用ai来生成一个。询问了一下deepseek,deepseek摊手表示不会,但也推荐了一个ai小伙伴,kimi。关于kimiKimi是由北京月...

工作相关 office

office 2025-02-25

Excel拆分复杂混合数据表至新表

一个拆分数据表的小案例,将混合表按国别拆分为多张数据表,并做一个简单的汇总工作。虽然代码不长,但最近vba用的不多,很多代码知道实现逻辑,但就是忘记了书写的格式,记录一下测试流程,方便查询。另外,简单功能active控件就能够满足要求...

工作相关 office

office 2025-02-12

Sublime 编辑器的正则替换

Sublime Text编辑器支持使用正则表达式进行文本搜索和替换,这是一个非常强大的功能,可以大大提高文本处理的效率。在Sublime Text中,你可以通过按下Ctrl+H来打开替换对话框,并点击对话框中的[.*]按钮来启用正则表...

工作相关 office

office 2025-02-10

qq的远程控制不好用?试试TeamViewer

qq也有远程控制功能,偶尔也能解个燃眉之急,不过遇到需要较长时间稳定硬控,qq的这个小功能就有点儿心有余而力不足了。这个时候还得让专业的来,博主常用的就是这个叫TeamViewer的软件。官网地址https://www.teamvie...

工作相关 office

office 2025-02-10

关于CAXA中的拟合样条功能

朋友发过来一张加工图,CAD格式的蚊香状的工件,导入到CAXA中是一条闭环的样条曲线,无法直接打散。尝试了一下CAXA中的拟合样条功能,自动重新生成了一个可编辑标注的图形,严丝合缝。查了一下样条拟合的概念,大致是将复杂曲线分为多段,段...

工作相关 office

office 2024-12-31

女职工延迟法定退休年龄对照表

前几天做了一张男职工延迟退休的文字格式的表格,感觉比图片格式看着清楚点,反正格式已经有了,顺手做张女职工的。女职工的退休年龄分为两档,所以就有两张表格,分别是五十岁退休档和五十五岁退休档。女职工的法定退休年龄从原五十周岁、五十五周岁分...

工作相关 office

office 2024-12-29

男职工延迟法定退休年龄对照表

上班忙完,突然想起延迟退休的事情,就顺手查了一下延迟退休的资料,发现在第十四届全国人民代表大会常务委员会第十一次会议上已经决定:同步启动延迟男、女职工的法定退休年龄,用十五年时间,逐步将男职工的法定退休年龄从原六十周岁延迟至六十三周岁...

工作相关 office

office 2024-10-08

WIN7系统如何共享WIN10的打印机

迫于农行网银升级的压力,给单位的财务电脑升级到了win10,重装后考虑到可能需要打印机共享,所以提前设置了相同的工作组,以便同工作组内的设备相互识别,当然装完系统后也设置好了打印机共享。但是同办公室的win7倒也是识别到了同组中的wi...

工作相关 office

office 2024-07-26

如何将证件照的蓝底修改为白底

想给孩子报名参加csp-j入门组的比赛,体验一下比赛的流程与难度,报名需要提交一张白底的照片,但手头上的照片是蓝色背景的。用ps的魔棒工具直接选取之后,衣服部分的效果尚可,但发丝部位还是有蓝色残留,效果比较粗糙。有过ps的使用经验(但...

工作相关 office

office 2024-04-17

iphone用相机提取照片中的文字

随着手机像素越来越高,平时拍个产品照片,发货唛头什么的绰绰有余,所以自从单位的拍照用的数码相机损坏之后,也没有考虑再次购入,直接用手机操作一下就好。手机集成的功能越来越多,无形中挤掉了很多旧有单一功能电子产品的市场。博主之前一直用的i...

工作相关 office