首页>工作相关>word自动打印编号时如何跳过指定序列号

word自动打印编号时如何跳过指定序列号

上班摸鱼小技巧

重复的工作做得多了,难免会想要偷个小懒,利用编程的方式来自动化一些工作流程,从而可以忙里偷闲,在自动化工作期间泡一杯茶,看一眼微信未读信息。于是写了这样一段代码,来实现word的自动化打印:

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

一次打印事故

虽然说是自动打印,但爱岗敬业的博主还是守在工位上监管的,某天打印到一半的时候,打印机头有点堵塞,新出来的打印件文字模糊不清。赶紧暂停了打印流程,删除了任务,检查了一下已打印的文件,前面10几张是好的,从第十二张开始打印效果模糊,但几张好的打印件的序列号并不连贯。这里需要解释下不连贯的原因,因为是自动打印,打印机同时接收到几十个打印任务后,有时候并不会从第一个任务开始打印。

接下来就遇到了问题,从头开始从1到末尾打印吧,正常打印的含序列号的件就要作废了,要把这些件用上吧,那似乎需要设置一个数组,然后每次打印之前去数组中核对当前循环的值是否已经包含在数组当中,包含则跳过打印流程,不包含则正常打印。

临时抱佛脚的vba学习

vba并不使用return来返回值,需要返回值的时候,可以用给函数的同名参数赋值的方法,定义数组的方法直接是百度搜索的,中断函数执行也不能依赖return,但vba有专用的退出命令“Exit Function”。掌握了以上知识点,基本就能满足博主检测数据的需求了,先定义一个检测函数与检测数组,在循环中每次检查该数据是否包含在检测数组之中,包含则返回0,不包含则返回1。

Function check(num)
    myArray = Array(1, 2, 3)
    For i = 0 To UBound(myArray)
        If num = myArray(i) Then
            check = 0
            Exit Function
        End If
    Next i
    check = 1
End Function

完整程序

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
'打印前检测一下数据,为1时执行打印操作
If check(i)=1 Then

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
End If

Next i
End Sub

Function check(num)
    myArray = Array(1, 2, 3)
    For i = 0 To UBound(myArray)
        If num = myArray(i) Then
            check = 0
            Exit Function
        End If
    Next i
    check = 1
End Function

标签: 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

office 2024-04-02

Coreldraw报错“向程序发送命令时出现问题”

想尝试创建一个使用于全局的宏命令,以实现一个跨文件的小功能,但发现在全局模块内插入时无法保存gms文件,在当前文件内的模块则可以正常保存。既然有保存按钮,按理不应该出现这种情况,考虑到Coreldraw程序被博主安装到了c盘,而c盘文...

工作相关 office

office 2024-03-29

Coreldraw中无法直接粘贴QQ截图

工作多更多的使用台式机,办公需要联络的合作伙伴也都加了QQ,所以一般也都以QQ相互联系。一方面QQ该有的功能都有满足需求,另一方面也能更好的区分公私环境。记得早先Coreldraw是可以直接粘贴QQ截图的,但架不住QQ隔三岔五的更新,...

工作相关 office

office 2023-12-26

硬盘空间不足导致pdf文件打印空白一例

同事的电脑安装的win7,c盘分的比较小---60个g,公司的电脑,办公用的,安装了许多办公软件开票软件之类,重装涉及一堆操作,所以也一直没有去改它,日积月累的,很快60个g就快满了。某天同事找博主,说pdf格式的文件无法打印,于是过...

工作相关 office