ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教打印窗体时如何调用打印机对话框

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-11 20:55 | 显示全部楼层 |阅读模式
原来是直接用默认打印机打印窗体UserForm,即

UserForm.PrintForm
现在默认打印机改了,每次先要变更默认打印机,最后还要改回来,易混乱。
请教如何在打印窗体时调用打印机对话框?谢谢!

TA的精华主题

TA的得分主题

发表于 2022-12-11 22:53 | 显示全部楼层
  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

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

  48.     Sub 在工作表中引用打印机名()
  49.         Set net = CreateObject("WScript.Network")
  50.         net.SetDefaultPrinter Range("L1")
  51.         ActiveSheet.PrintPreview  '打印预览
  52.         net.SetDefaultPrinter Range("L2")
  53.     End Sub
  54.    
  55. ***************************
  56. Private Sub ListBox1_Click()
  57.     Dim i&, s$, ws As Object
  58.     For i = 0 To ListBox1.ListCount - 1
  59.         If ListBox1.Selected(i) = True Then
  60.             s = ListBox1.List(ListBox1.ListIndex, 0)
  61.         End If
  62.     Next
  63.     Set ws = CreateObject("wscript.network")
  64.     ws.SetDefaultPrinter s
  65. End Sub


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

  79. '====================打印
  80. Private Sub CommandButton1_Click()
  81.     Dim i&, a&, b&, s$
  82.     For i = 0 To ListBox1.ListCount - 1
  83.         If ListBox1.Selected(i) = True Then
  84.           '  s = ListBox1.List(ListBox1.ListIndex, 0)
  85.             a = 1
  86.             b = Range("d7")
  87.             For i = a To b
  88.                 Range("A1:D10").PrintOut
  89.                 Range("h2") = Range("h1") + i
  90.             Next
  91.         Else
  92.             MsgBox "请先选择打印机型号"
  93.         End If
  94.     Next
  95. End Sub

复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-12 20:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢提供这么多方法,要好好消化!
本来以为是个吧命令的问题,想简单了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 09:38 , Processed in 0.031522 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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