.net实现批量在线打印_利用Excel VBA实现批量打印的思路

c9dd6ac813c50f327572e3b4f97738d6.png

c0b7bb791f571a67f2d7813e135569ec.png

今天分享一个VBA实现自动打印的功能,录制宏+修改代码实现。

▍这篇文章你将学到以下知识点:

录制宏并修改代码;instr函数;循环打开工作簿的通用写法;选择文件夹对话框。

我会认真写,希望看完文章后,能在遇到类似问题的某个瞬间能想到:好像我在哪个公众号见过类似的例子和知识点。再回来翻看这篇文章就行了。

▍问题引入:

在知乎Excel有多厉害?这个回答中,大V何明科老师介绍过这个功能。今天我们就来说一下实现的步骤。

0c953695c73d9481716bb32858cbdc21.png

▷我自己随便下载了几个表格当做案例附件。

bbfd0df64092e42bc45fd650d731f1a4.png

110c126d8bc81f4de0c95c9ca541e7cf.png

▍实现步骤:

录制宏,获取打印活动表格动作的代码。(没有真实打印机,以pdf虚拟打印机作为例子)

录制宏视频连接:

录制批量打印的宏​dldir1.qq.com

录制宏的到的代码:

a71007f51f16c57aaca81afcdd6e5059.png

修改代码,经过修改和补充,得到最终的代码(初学可以不修改录制宏得到的代码):

 1Sub 批量打印()
 2Application.ScreenUpdating = False
 3    With Application.FileDialog(msoFileDialogFolderPicker)
 4        If .Show = -1 Then fl = .SelectedItems(1) & ""
 5    End With
 6    f = Dir(fl & "*.xls*")
 7    Do While f <> ""
 8        Workbooks.Open (fl & f)
 9        For Each sht In ActiveWorkbook.Worksheets
10            If InStr(1, sht.Name, "标准表") > 0 Then
11                sht.Select
12                With ActiveSheet.PageSetup
13                    .PaperSize = xlPaperA4
14                    .Zoom = 80
15                End With
16                ActiveWindow.SelectedSheets.PrintOut IgnorePrintAreas:=False, _
17                printtofile:=True, prtofilename:=fl & ActiveWorkbook.Name & sht.Name & ".pdf"
18            End If
19        Next
20        ActiveWorkbook.Close False
21        f = Dir
22    Loop
23    Application.ScreenUpdating = True
24    MsgBox "完成"
25End Sub

代码超级详解:

 1sub过程名
 2关闭屏幕刷新提高运行速度
 3弹出FileDialog对话框,提示用户选择文件夹作为路径
 4如果选择了文件夹,则返回参数-1,如果点取消则返回参数0
 5End With
 6利用DIR函数取出路径文件夹下的第一个工作簿,并赋值给变量f
 7只要能取出来工作簿名称,就做循环,直到取出的文件名为空停止循环
 8打开工作簿
 9for each函数对打开的活动工作簿中每个表格进行循环
10如果工作表名称中存在“标准表”字段,则进行以下循环
11激活工作表,为下一步打印做准备
12使用pagesetup对象对打印页面进行设置
13纸张大小为A4纸
14缩放比例为80%
15End With
16利用printout方法对打印过程进行设置
17将表格打印到文件,全路径是活动工作簿的名字+工作表的名字+“.pdf”
18   End If
19   Next
20关闭当前打开的工作簿,不保存
21再次使用Dir函数,获取下一个工作簿,第二次使用可以直接写成f=Dir,省略参数
22Loop
23开启屏幕刷新
24MsgBox "完成"
25End Sub

运行代码,泡杯茶,等待自己打印完成。

d8da8a94e9b301ab59cf56ad590b8d28.gif

▍知识点讲解:

■instr函数

指定一字符串在另一字符串中最先出现的位置。

语法:

InStr([start, ]string1, string2[, compare])
参数解释:
start可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从 第一个字符的位置开始。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式。
string2 必要参数。被搜索的字符串表达式。
Compare可选参数。指定字符串比较。如果省略 compare,Option Compare 的设置将决定比较的类型。(一般默认不写,特殊情况这里不叙述)


举个例子就很好理解了

InStr(1, sht.Name, "标准表") 

这里就表示,在工作表的名字中搜索“标准表”字符串,如果包含这个字符串,他将会返回出现的位置。

InStr(1, “ABCD”, "C")   '这里结果会返回3
InStr(1, “ABCDC”, "C")   '这里结果仍然会返回3

■选择文件夹对话框

如果要选择文件夹作为路径,参照我的写就可以,是个通用模式。

 1选择文件夹
 2Sub SelectFolder()  
 3    '选择单一文件夹  
 4    With Application.FileDialog(msoFileDialogFolderPicker)  
 5        If .Show = -1 Then  
 6        'FileDialog 对象的 Show 方法显示对话框,并且返回 -1(如果您按 OK)和 0(如果您按 Cancel)。  
 7            MsgBox "您选择的文件夹是:" & .SelectedItems(1)  
 8        End If  
 9    End With  
10End Sub  

FileDialog对象的更多应用:获取文件全路径(二)FileDialog对象

= 推荐阅读 =

你的小黄鸭来了~ | 操作Txt | VBA学习经验 | 合并拆分 | 字符串函数 | 循环知识 | 封装Dll | 进度条 | 生成二维码 | 联想输入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值