暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

VBA 任意指定区域打印

Excel VBA练习 2021-08-05
4783

今天,还是说下打印


示例文件下载

链接:https://pan.baidu.com/s/1o_XNGyqM3ywsGoXg-pDOcg
提取码:abcd


关注公众号 ↓


比如说,我想打印我选择的区域

如下图所示



我只想打印前几行


为此,小编封装了一个打印机设置的代码

VBA 报表打印

分别是打印机设置以及逆序打印 代码如下

    Sub 打印机设置(工作表 As Worksheet, 打印区域 As String, _
    Optional 打印方向 As Boolean = False, Optional 纸张大小 As Long = 1, Optional 右边距 As Long = 1, _
    Optional 左边距 As Long = 1, Optional 上边距 As Long = 2, Optional 下边距 As Long = 1.5, _
    Optional 左页眉 = "", Optional 左页脚 As String = "", Optional 中心页脚 As String = "", _
    Optional 右页脚 As String = "", Optional 标题 As String = "")
    With 工作表.PageSetup
    .Orientation = IIf(打印方向, xlLandscape, xlPortrait)
    .PaperSize = IIf(纸张大小 = 1, xlPaperA4, xlPaperA5)
    .RightMargin = Application.CentimetersToPoints(右边距) '
    .LeftMargin = Application.CentimetersToPoints(左边距)
    .TopMargin = Application.CentimetersToPoints(上边距)
    .BottomMargin = Application.CentimetersToPoints(下边距)
    .CenterHorizontally = True '水平中心
    .LeftHeader = 左页眉
    .LeftFooter = 左页脚
    .CenterFooter = 中心页脚
    .RightFooter = 右页脚
    .PrintTitleRows = 标题
    .PrintArea = 打印区域
    .Zoom = False '自适应缩放
    .FitToPagesWide = 1
    .FitToPagesTall = 100
    End With
    End Sub


    Sub 逆序打印(工作表 As Worksheet)
    Dim k&, x&
    k = Application.ExecuteExcel4Macro("Get.Document(50)") '获取整份文档的页数
    For x = k To 1 Step -1
    工作表.PrintOut ActivePrinter:="EPSON L130 Series", from:=x, to:=x
    Next
    End Sub


    复制

    而调用,也非常的简单

      Sub 指定区域打印()
      Dim Rng As Range, iRow$, YesNo$, Flag As Boolean, strTitle$
      Dim Sht As Worksheet
      Set Sht = ActiveSheet
      On Error Resume Next
      Set Rng = Application.InputBox("请选择需要打印的区域", "EXCEL VBA 练习 提示!", , , , , , 8)
      If Rng Is Nothing Then MsgBox "请重新选择!", 64, "提示!": Exit Sub
      If Rng.Count = 1 Then MsgBox "区域范围那么小....": Exit Sub
      Set Rng = Intersect(Rng, Rng.Parent.UsedRange)
      iRow = Application.InputBox("标题行数", "EXCEL VBA 练习 提示!", 1, , , , , 1)
      If iRow < 0 Then MsgBox "不能为负数...", 64, "提示": Exit Sub
      If iRow >= 10 Then MsgBox "标题行有那么多...?": Exit Sub
      strTitle = IIf(iRow = 0, "", "$1:$" & iRow)
      YesNo = MsgBox("确定:横向 取消:纵向", vbYesNo, "选择打印方向")
      Flag = IIf(YesNo = 7, False, True)
      Call 模块.打印机设置(工作表:=Sht, 打印区域:=Rng.Address(0, 0), 打印方向:=Flag, _
      左页眉:=Format(Now, "yyyy-mm-dd hh:mm:ss"), 左页脚:="制单人:Excel VBA 练习", _
      右页脚:="第 &P 页,共 &N 页", 标题:=strTitle)
      Call 模块.逆序打印(Sht)
      End Sub
      复制

      代码中

      第6至15行,判断用户选择的区域、表头行数以及打印方向,这些都可以封装,我们以后在慢慢优化...

      第16行调用自定义函数打印机设置,由于代码放置在命为模块的模块中



      输入模块.会自动弹出里面的代码

      这里小编使用中文在封装打印机设置,就不在解析,只用工作表 As Worksheet, 打印区域 As String 这两个是必选参数,其余的是可选参数

      第17行调用自定义函数 逆序打印参数也只有一个,代码意思也就是从最后一页一直向第一页打印,这样打印出来就不用再次整理...


      收工!我们明天见

      如果小伙伴有好的思路,可以在小编的公众号留言发给小编研究下

      文章觉得有用,点个赞+在看,你的每一次点赞和转发就是小编原创的动力

      文章转载自Excel VBA练习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论