ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何自动打印标签

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-14 14:39 | 显示全部楼层 |阅读模式
根据打印数据表里的数据 计算出需要打印多少张、自动印出来
提前谢谢大神们

image.png
这是打印数据表
image.png
这是每个型号对应的,每箱数量
image.png
这是标签格式,一张纸可以打印四张标签

标签打印.rar

27.17 KB, 下载次数: 30

TA的精华主题

TA的得分主题

发表于 2019-12-14 16:24 | 显示全部楼层
本帖最后由 xiaoyaotan_lhb 于 2019-12-14 16:25 编辑

最近我也做了一个类似的模板,挺好用的,可以交流一下

TA的精华主题

TA的得分主题

发表于 2019-12-14 19:54 | 显示全部楼层
  1. Sub 打印()
  2.     Rem http://club.excelhome.net/thread-1512767-1-1.html
  3.     Dim arr, brr
  4.     Dim m%, n%, i%
  5.     Dim dic As Object
  6.     Set dic = CreateObject("Scripting.Dictionary")
  7.     arr = Worksheets("每箱数量").Range("B2").CurrentRegion
  8.     brr = Worksheets("打印数据表").Range("B2").CurrentRegion
  9.     For m = 1 To UBound(arr, 1)
  10.         dic(arr(m, 1)) = arr(m, 2)    '写入字典中方便后续查找
  11.     Next
  12.     With Worksheets("标签格式")
  13.         For m = 2 To UBound(brr, 1)
  14.             Union(.Cells(4, "C"), .Cells(25, "C"), .Cells(4, "K"), .Cells(25, "K")) = brr(m, 2)
  15.             Union(.Cells(6, "C"), .Cells(27, "C"), .Cells(6, "K"), .Cells(27, "K")) = brr(m, 3)
  16.             Union(.Cells(8, "C"), .Cells(29, "C"), .Cells(8, "K"), .Cells(29, "K")) = brr(m, 4)
  17.             Union(.Cells(10, "C"), .Cells(31, "C"), .Cells(10, "K"), .Cells(31, "K")) = brr(m, 5)
  18.             Union(.Cells(18, "C"), .Cells(39, "C"), .Cells(18, "K"), .Cells(39, "K")) = brr(m, 8)
  19.             If brr(m, 6) > dic(brr(m, 2)) Then
  20.                 n = brr(m, 6) \ dic(brr(m, 2))    '获取整数份数
  21.                 i = brr(m, 6) Mod dic(brr(m, 2))  '多出来的非标准数量
  22.                 If n \ 4 > 0 Then   '如果数量大于等于4份
  23.                     Union(.Cells(14, "C"), .Cells(35, "C"), .Cells(14, "K"), .Cells(35, "K")) = dic(brr(m, 2)) & "(" & brr(m, 7) & ")"
  24.                     .PrintOut Copies:=n \ 4 '先直接打印对应张纸
  25.                 End If
  26.                 If (n Mod 4 = 0) And (i > 0) Then
  27.                     .Cells(14, "C") = i & "(" & brr(m, 7) & ")"
  28.                     .Range("A1:D19").PrintOut Copies:=1, Collate:=True '然后按照选定区域打印一份
  29.                 ElseIf n Mod 4 = 1 Then
  30.                     .Cells(14, "C") = dic(brr(m, 2)) & "(" & brr(m, 7) & ")"
  31.                     If i > 0 Then .Cells(14, "K") = i & "(" & brr(m, 7) & ")"
  32.                     IIf(i > 0, .Range("A1:L19"), .Range("A1:D19")).PrintOut Copies:=1, Collate:=True '然后按照选定区域打印一份
  33.                 ElseIf n Mod 4 = 2 Then
  34.                     Union(.Cells(14, "C"), .Cells(14, "K")) = dic(brr(m, 2)) & "(" & brr(m, 7) & ")"
  35.                     If i > 0 Then
  36.                         .Cells(35, "C") = i & "(" & brr(m, 7) & ")"
  37.                         .Cells(35, "K") = "多余的一份,请作废!"
  38.                     End If
  39.                     IIf(i > 0, .Range("A1:L40"), .Range("A1:L19")).PrintOut Copies:=1, Collate:=True '然后按照选定区域打印一份
  40.                 ElseIf n Mod 4 = 3 Then
  41.                     Union(.Cells(14, "C"), .Cells(14, "K"), .Cells(35, "C")) = dic(brr(m, 2)) & "(" & brr(m, 7) & ")"
  42.                     .Cells(35, "K") = IIf(i > 0, i & "(" & brr(m, 7) & ")", "多余的一份,请作废!")
  43.                     .PrintOut Copies:=1, Collate:=True   '然后按照选定区域打印一份
  44.                 End If
  45.             Else
  46.                 Union(.Cells(14, "C"), .Cells(35, "C"), .Cells(14, "K"), .Cells(35, "K")) = brr(m, 6) & "(" & brr(m, 7) & ")"
  47.                 .Range("A1:D19").PrintOut Copies:=1, Collate:=True   '按照选定区域打印一份
  48.             End If
  49.         Next
  50.     End With
  51.     MsgBox "打印已完成!"
  52. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-12-14 19:56 | 显示全部楼层
参考附件,凑合着用。
标签打印.zip (30.87 KB, 下载次数: 21)

TA的精华主题

TA的得分主题

发表于 2019-12-14 23:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub 打印02()
  2.     Dim arr, brr
  3.     Dim m&, n&, i%, j&
  4.     Dim dic As Object
  5.     Set dic = CreateObject("Scripting.Dictionary")
  6.     arr = Worksheets("每箱数量").Range("B2").CurrentRegion
  7.     brr = Worksheets("打印数据表").Range("B2").CurrentRegion
  8.     For m = 1 To UBound(arr, 1)
  9.         dic(arr(m, 1)) = arr(m, 2)    '写入字典中方便后续查找
  10.     Next
  11.     i = 1    '给定初始循环值
  12.     With Worksheets("标签格式")
  13.         For m = 2 To UBound(brr, 1)
  14.             Do
  15.                 For n = i To 4
  16.                     .Cells(4 + Abs(n > 2) * 21, 3 + Abs(n Mod 2 = 0) * 8) = brr(m, 2)
  17.                     .Cells(6 + Abs(n > 2) * 21, 3 + Abs(n Mod 2 = 0) * 8) = brr(m, 3)
  18.                     .Cells(8 + Abs(n > 2) * 21, 3 + Abs(n Mod 2 = 0) * 8) = brr(m, 4)
  19.                     .Cells(10 + Abs(n > 2) * 21, 3 + Abs(n Mod 2 = 0) * 8) = brr(m, 5)
  20.                     .Cells(18 + Abs(n > 2) * 21, 3 + Abs(n Mod 2 = 0) * 8) = brr(m, 8)
  21.                     .Cells(14 + Abs(n > 2) * 21, 3 + Abs(n Mod 2 = 0) * 8) = dic(brr(m, 2)) & "(" & brr(m, 7) & ")"
  22.                     j = j + dic(brr(m, 2))
  23.                     If j > brr(m, 6) Then
  24.                         .Cells(14 + Abs(n > 2) * 21, 3 + Abs(n Mod 2 = 0) * 8) = brr(m, 6) Mod dic(brr(m, 2)) & "(" & brr(m, 7) & ")"
  25.                         If brr(m, 6) Mod dic(brr(m, 2)) <> 0 And n = 4 Then
  26.                             n = 5   '如果最后一个数量大于0,刚好填完一行数据,此时m=4,但是要跳出循环并打印,所以令m=5
  27.                         End If
  28.                         Exit For   '结束内层循环
  29.                     End If
  30.                 Next
  31.                 If n = 5 Or m = UBound(brr, 1) Then
  32.                     .PrintOut Copies:=1   '满足四个标签填完就打印,或者最后一行数据
  33.                     i = 1      '打印后重新填写,i值恢复到初始循环1
  34.                 Else
  35.                     If brr(m, 6) Mod dic(brr(m, 2)) = 0 Then
  36.                         i = n     '下一次从n值开始循环填写
  37.                     Else
  38.                         i = n + 1  '在n基础上累加一次,进入下一个填写。
  39.                     End If
  40.                 End If
  41.                 If j >= brr(m, 6) Then
  42.                     j = 0
  43.                     Exit Do   '结束Do循环
  44.                 End If
  45.             Loop
  46.         Next
  47.     End With
  48.     MsgBox "打印已完成!"
  49. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-12-14 23:10 | 显示全部楼层
给你修改一下打印方式,这样可以更加节省纸张一点。
标签打印.zip (32.25 KB, 下载次数: 37)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 03:01 , Processed in 0.034450 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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