ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 19296|回复: 14

[分享] VBA更改当前使用的打印机

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-23 13:16 | 显示全部楼层 |阅读模式
本帖最后由 senhuan 于 2012-11-23 13:21 编辑

刚看完《Excel VBA其实很简单》,有些兴奋所以找些工作中提起的需求尝试用VBA解决练练手来,所以有了以下的结果……
声明:VBA初学入门,需要的是意见或鼓励,欢迎讨论但请不喜勿喷{:soso_e149:}

需求描述:
需打印的文件太多,有的需要A3,有的是A4,有的存档要B5,所以要在多台打印机间频繁切换,不能更改系统默认打印机,只能分别依次打开每个文件后在打印设置页面选择打印机列表更改要使用的机器名称,问题是:如何一键自动设置?

原理解析:
Excel VBE立即窗口输入“?Application.ActivePrinter”,将返回当前系统默认使用的打印机名称,返回值类似“Brother HL-5340D series Ne02:
2.png

要使用VBA更改当前使用打印机,可以使用代码Application.ActivePrinter="Brother HL-5340D series Ne02:"来设置。我们知道“BrotherHL-5340D series”是打印机名称(可从“开始——设置——打印机和传真”那里看到),那上面提到的如“Ne02:”又从何得来??
打印机列表.png

要自动设置当前打印机,前提有两个:
一、自动查找本机可用打印机列表;
二、自动查找各打印机使用的端口。

经搜索,从以下任一注册表项均可读取本机完整打印机名称列表(包括端口):
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Devices
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\PrinterPorts
HKEY_USERS\.DEFAULT\Software\Microsoft\WindowsNT\CurrentVersion\Devices
HKEY_USERS\.DEFAULT\Software\Microsoft\WindowsNT\CurrentVersion\PrinterPorts
HKEY_USERS\S-1-5-18\Software\Microsoft\WindowsNT\CurrentVersion\Devices
HKEY_USERS\S-1-5-18\Software\Microsoft\WindowsNT\CurrentVersion\PrinterPorts
HKEY_USERS\S-1-5-19\Software\Microsoft\WindowsNT\CurrentVersion\Devices
HKEY_USERS\S-1-5-19\Software\Microsoft\WindowsNT\CurrentVersion\PrinterPorts
HKEY_USERS\S-1-5-20\Software\Microsoft\WindowsNT\CurrentVersion\Devices
HKEY_USERS\S-1-5-20\Software\Microsoft\WindowsNT\CurrentVersion\PrinterPorts

显示效果如下:
注册表.png

或者
1.png

因文章较长,详细图文解析、代码及运行效果演示见附件:
使用VBA以简单方法更改当前使用的打印机.rar (67.52 KB, 下载次数: 1457)
代码运行效果演示.part01.rar (280 KB, 下载次数: 703)
代码运行效果演示.part02.rar (209.43 KB, 下载次数: 663)

TA的精华主题

TA的得分主题

发表于 2012-11-23 20:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主辛苦了,谢谢分享

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-23 22:24 | 显示全部楼层
也可以使用PrintOut方法来直接调用其他非系统默认打印机来打印,这样可以不用读取注册表来提取打印机对应端口,实现代码大致如下
  1. Sheets(1).PrintOut ActivePrinter:="Brother HL-5340D series"
复制代码

TA的精华主题

TA的得分主题

发表于 2012-12-12 13:28 | 显示全部楼层
如果本机添加有网络打印机,执行到以下代码时就出错了:
      str = shl.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices\" & StrPrinters(x))

如何解决??

TA的精华主题

TA的得分主题

发表于 2013-1-9 21:24 | 显示全部楼层
但如果要同一个文件给不同电脑使用该怎么办?同一打印机在不同电脑的端口是不同的啊。

TA的精华主题

TA的得分主题

发表于 2014-6-11 15:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-4-20 17:15 | 显示全部楼层

我在这个帖子,发布的问题,可能在这 个帖子中能找到解决方法。

Excel Application.ActivePrinter 控制打印机→如何设置打印机?-ExcelVBA程序开发-ExcelHome技术论坛 -

http://club.excelhome.net/forum. ... p;extra=#pid8177997

TA的精华主题

TA的得分主题

发表于 2015-4-20 17:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
进来学习一下!谢谢各位大大!

TA的精华主题

TA的得分主题

发表于 2015-4-20 21:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-6 10:56 | 显示全部楼层
很好很强大,也很实用,回头试试效果!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-16 10:54 , Processed in 0.031588 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表