ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA 指定打印机打印

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-31 19:05 | 显示全部楼层 |阅读模式
   由于单位需要套打证件,电脑上安装有多台打印机,套打时需指定用针式打印机,在论坛学习良久,现将自己学习组合的打印程序发出共享。可在Sheet1表里面建一个命令按钮来调用。第一次运行时选择自己需要的打印机并写入设置,以后可直接指定打印机打印。   
  1. Function NameExist(sName As String) As Boolean    '判断定义名称是否存在函数
  2. Dim NameCount As Integer
  3. NameExist = False
  4. For NameCount = 1 To Workbooks(1).Names.Count
  5.     If Workbooks(1).Names(NameCount).NameLocal = sName Then
  6.         NameExist = True
  7.         Exit Function
  8.     End If
  9. Next
  10. End Function

  11. Private Sub FindPrint()  '判断指定的打印机是否存在
  12.       If Application.ActivePrinter = Evaluate(ActiveWorkbook.Names("printname").Value) Then
  13.      Exit Sub
  14.      Else
  15.           Call Printsetup    '调用打印机设置并定义名称
  16.           Exit Sub
  17.     End If
  18. End Sub

  19. Private Sub Printsetup()    '调用打印机设置并定义名称,把设定的打印机写入Excel名称
  20. Dim n As Boolean, dyj$
  21.     n = Application.Dialogs(xlDialogPrinterSetup).Show       '调用打印机设置
  22.       If n = True Then
  23.         dyj = Application.ActivePrinter
  24.         ActiveWorkbook.Names.Add Name:="printname", RefersTo:=dyj   '写入名称
  25.       Exit Sub
  26.       End If
  27. End Sub

  28. Private Sub CommandButton1_Click()      '打印
  29. Dim n As Boolean, dyj$
  30. If NameExist("printname") Then '判断是否有打印机名称定义存在,如没有调用打印机设置
  31. Dim printyb, duankou, i%, j%
  32. Call FindPrint  '判断指定的打印机是否存在
  33. Sheet1.PrintOut Application.ActivePrinter = Evaluate(ActiveWorkbook.Names("printname").Value)
  34. Else
  35.     Call Printsetup  '调用打印机设置
  36.     Sheet1.PrintOut Application.ActivePrinter = Evaluate(ActiveWorkbook.Names("printname").Value)   '打印Sheet1表格,可自行设定。
  37. End If
  38. End Sub
复制代码






评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-1 08:59 | 显示全部楼层
自己感觉判断系统是否有安装指定打印机的语名有点不对,请版主能否想个办法,否则每次都跳出选择打印机

TA的精华主题

TA的得分主题

发表于 2016-3-2 22:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太好用了,谢谢分享!

TA的精华主题

TA的得分主题

发表于 2016-3-2 23:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

  1. 如果你默认打印机为激光,当打印某表时需用针式打印机
  2. 可设置以下代码点击按扭时改为针式,打好后又恢复激光
  3. Sub 在代码中直接写入打印机名()
  4.     Set net = CreateObject("WScript.Network")
  5.     net.SetDefaultPrinter "Jolimark FP-570K"
  6.     ActiveSheet.PrintPreview  '打印预览
  7.     net.SetDefaultPrinter "HP LaserJet Professional P 1102w"
  8. End Sub

  9. Sub 在工作表中引用打印机名()
  10.     Set net = CreateObject("WScript.Network")
  11.     net.SetDefaultPrinter Range("L1")
  12.     ActiveSheet.PrintPreview  '打印预览
  13.     net.SetDefaultPrinter Range("L2")
  14. End Sub
复制代码

补充内容 (2020-1-9 22:27):
还可以用列表框选择打印机
Private Sub ListBox1_Click()
    Dim i&, s$, ws As Object
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            s = ListBox1.List(ListBox1.ListIndex, 0)
        End If
    Next
    Set ws = CreateObject("wscript.network")
    ws.SetDefaultPrinter s
End Sub


'===============窗体初始化生成打印机列表
Private Sub UserForm_Initialize()
    Dim i&, ws As Object, ptn$, arr() As String, n&, m&
    Set ws = CreateObject("wscript.network")
    n = ws.EnumPrinterConnections.Count
    ReDim arr(1 To n / 2)
    For i = 1 To n - 1 Step 2
        ptn = ws.EnumPrinterConnections.Item(i)  '打印机名称
        m = (i - 1) / 2 + 1
        arr(m) = ptn
    Next
    Me.ListBox1.List = Application.Transpose(arr)
End Sub

'====================打印
Private Sub CommandButton1_Click()
    Dim i&, a&, b&, s$
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
          '  s = ListBox1.List(ListBox1.ListIndex, 0)
            a = 1
            b = Range("d7")
            For i = a To b
                Range("A1:D10").PrintOut
                Range("h2") = Range("h1") + i
            Next
        Else
            MsgBox "请先选择打印机型号"
        End If
    Next
End Sub

评分

9

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-3-9 11:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-12-2 02:22 | 显示全部楼层
啊嘞,你这个代码啊,一颗赛艇!基本可以结束全部关于vba选打印机的问题喽。

TA的精华主题

TA的得分主题

发表于 2016-12-14 10:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢感谢,这段代码帮了大忙了!

TA的精华主题

TA的得分主题

发表于 2016-12-15 13:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-12-20 08:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习了,现在在研究VBA

TA的精华主题

TA的得分主题

发表于 2017-5-8 10:30 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 20:31 , Processed in 0.034559 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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