ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南

[求助] 按模板生成标签打印

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-11-11 17:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sungtinedue 发表于 2025-11-11 16:11
删掉  模板和打印2表中的D列   
Sub ykcbf()
    Application.ScreenUpdating = False

I列也要删除才行

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-11-11 22:42 | 显示全部楼层
ykcbf1100 发表于 2025-11-11 07:37
写了一个按模板生成打印表的代码,仅供参考。

代码仅适用于当前附件

EH的精英坛友:

       生成标签打印:
      现需增加一个条件:横排生成N张标签,有时需要3张或5张等
            如选5张,一排上显示5张
      再增加一个清空按钮:
           把生成的物料信息清空!
     现重新上传附件!
     麻烦大神的热忱大力相助,非常感谢!!!
    生成标签打印1110.zip (30.06 KB, 下载次数: 12)
    增加横列标签数1111.png
    。

TA的精华主题

TA的得分主题

发表于 2025-11-12 08:31 | 显示全部楼层
试试横排生成N张标签,目前设置最大10个

生成标签.zip

40.05 KB, 下载次数: 29

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-11-12 14:12 | 显示全部楼层
本帖最后由 massCS 于 2025-11-14 20:34 编辑
  1. Option Explicit

  2. Private Type rngConfig
  3.     rngAdd As String        ' 地址
  4.     mRows As Variant        ' 需要合并的行(集合)
  5.     dateAdd As String       ' 日期格式单元格
  6.     colsWidth As Variant    ' 列宽(集合)
  7.     rowsHeight As Variant   ' 行高(集合)
  8.     borderAdd As String     ' 设置框线区域
  9.     borderLineStyle As XlLineStyle  ' 框线类型
  10.     borderWeight As XlBorderWeight  ' 框线粗细
  11.     fontName As String  ' 字体类型
  12.     fontSize As Double  ' 字体大小
  13.     copyrCount As Long  ' 横向数量
  14.     HPageRows As Long   ' 纵向分页符添加行数
  15. End Type

  16. Private Const wsName0 As String = "Date"
  17. Private Const wsName1 As String = "打印"
  18. Private msgArr As Variant

  19. Sub Main()
  20.     Dim RC As rngConfig, arr As Variant
  21.    
  22.     SetApps False
  23.     msgArr = Array("完成 !", "源数据为空", "请输入横向数量", "横向数量不合法")
  24.    
  25.     If InputData(arr, RC) Then
  26.         OutputData arr, RC
  27.         MsgBox msgArr(0)
  28.     End If
  29.    
  30.     SetApps True
  31. End Sub

  32. Private Function InputData(dataArr As Variant, RC As rngConfig) As Boolean
  33.     Dim ir As Long, i As Long, temp
  34.    
  35.     InputData = False
  36.    
  37.     ' 获取数据源
  38.     With ThisWorkbook.Sheets(wsName0)
  39.         LastRow .Range("A:G"), ir
  40.         If ir < 2 Then MsgBox msgArr(1): Exit Function
  41.         dataArr = .Range("A2:G" & ir).Value
  42.     End With
  43.    
  44.     ' 获取横向间隔
  45.     temp = Val(InputBox(msgArr(2), , 3))
  46.     temp = Int(temp)
  47.    
  48.     If temp <= 0 Then MsgBox msgArr(3): Exit Function
  49.     If temp < 3 Then temp = 3
  50.     If temp > 5 Then temp = 5
  51.    
  52.     ' 配置参数
  53.     With RC
  54.         .rngAdd = "A1:D8"
  55.         .mRows = Array(1, 2, 3, 4, 6, 7)
  56.         .dateAdd = "B6"
  57.         .colsWidth = Array(8.91, 19.82, 7.36, 1.36)
  58.         .rowsHeight = Array(18.5, 10)
  59.         .borderAdd = "A1:C7"
  60.         .borderLineStyle = xlContinuous
  61.         .borderWeight = xlThin
  62.         .fontName = "宋体"
  63.         .fontSize = 11
  64.         .copyrCount = temp
  65.         .HPageRows = IIf(temp = 3, 8, IIf(temp = 4, 10, 12))
  66.     End With
  67.    
  68.     InputData = True
  69. End Function

  70. Private Sub OutputData(dataArr As Variant, RC As rngConfig)
  71.     Dim rng As Range
  72.     Dim maxrow As Long, maxcol As Long, rowsCount As Long, colsCount As Long
  73.     Dim i As Long, j As Long, r As Long, c As Long
  74.    
  75.    
  76.     With ThisWorkbook.Sheets(wsName1)
  77.         .Rows.Delete Shift:=xlUp
  78.         Set rng = .Range(RC.rngAdd)
  79.     End With
  80.    
  81.     ' 设置区域格式,获取必要参数
  82.     With rng
  83.         maxrow = .Rows.Count: maxcol = .Columns.Count   ' 最大行列数
  84.         
  85.         .HorizontalAlignment = xlCenter
  86.         .VerticalAlignment = xlCenter
  87.         .NumberFormatLocal = "@"
  88.         .Range(RC.dateAdd).NumberFormatLocal = "yyyy/m/d"
  89.         .Columns(1).ColumnWidth = RC.colsWidth(0)
  90.         .Columns(2).ColumnWidth = RC.colsWidth(1)
  91.         .Columns(3).ColumnWidth = RC.colsWidth(2)
  92.         .Columns(4).ColumnWidth = RC.colsWidth(3)
  93.         .Rows("1:7").RowHeight = RC.rowsHeight(0)
  94.         .Rows(8).RowHeight = RC.rowsHeight(1)
  95.         .Range(RC.borderAdd).Borders.LineStyle = RC.borderLineStyle
  96.         .Range(RC.borderAdd).Borders.Weight = RC.borderWeight
  97.         .Font.Name = RC.fontName
  98.         .Font.Size = RC.fontSize
  99.         For i = 0 To UBound(RC.mRows)
  100.             .Range("B" & RC.mRows(i)).Resize(1, 2).Merge
  101.         Next i
  102.         
  103.         .Range("A1:A7").Value = WorksheetFunction.Transpose( _
  104.                                 Array("LOGO", "品号", "品名", "规格", "数量", "入库时间", "项目") _
  105.                                 )
  106.         .Range("B1").Value = "物料标识卡"
  107.     End With
  108.    
  109.     ' 获取打印范围
  110.     j = WorksheetFunction.RoundUp(UBound(dataArr, 1) / RC.copyrCount, 0)
  111.     rowsCount = j * maxrow - 1              ' 去掉最后一行自带分隔行
  112.     colsCount = RC.copyrCount * maxcol - 1  ' 去掉最后一列自带分隔列
  113.    
  114.     With ThisWorkbook.Sheets(wsName1)
  115.         ' 横向复制
  116.         c = 1
  117.         For i = 1 To RC.copyrCount - 1
  118.             rng.EntireColumn.Copy .Cells(1, c + maxcol)
  119.             c = c + maxcol
  120.             Application.CutCopyMode = False
  121.         Next i
  122.         ' 纵向复制
  123.         r = 1: c = 1
  124.         For i = 1 To j - 1
  125.             rng.EntireRow.Copy .Cells(r + maxrow, 1)
  126.             r = r + maxrow
  127.             c = c + 1
  128.             
  129.             If c = RC.HPageRows Then
  130.                 .HPageBreaks.Add Before:=.Cells(r, 1): c = 1   ' 添加水平分页符
  131.             End If
  132.             
  133.             Application.CutCopyMode = False
  134.         Next i
  135.         ' 写值
  136.         j = 1: r = 1: c = 1
  137.         For i = 1 To UBound(dataArr, 1)
  138.             With .Cells(r, c).Resize(maxrow, maxcol)
  139.                 .Cells(2, 2).Value = dataArr(i, 1)
  140.                 .Cells(3, 2).Value = dataArr(i, 2)
  141.                 .Cells(4, 2).Value = dataArr(i, 3)
  142.                 .Cells(5, 2).Value = dataArr(i, 5)
  143.                 .Cells(5, 3).Value = dataArr(i, 4)
  144.                 .Cells(6, 2).Value = dataArr(i, 6)
  145.                 .Cells(7, 2).Value = dataArr(i, 7)
  146.             End With
  147.             
  148.             If j = RC.copyrCount Then
  149.                 j = 1
  150.                 r = r + maxrow
  151.                 c = 1
  152.             Else
  153.                 j = j + 1
  154.                 c = c + maxcol
  155.             End If
  156.         Next i
  157.     End With
  158.     SetPagePrint rowsCount, colsCount ' 调整打印
  159.    
  160.     Set rng = Nothing
  161. End Sub

  162. Private Sub SetPagePrint(rowsCount As Long, colsCount As Long)
  163.     On Error Resume Next
  164.     Dim pAdd As String
  165.     Dim LR As Double
  166.     Dim tbNum As Double
  167.     Dim hfNum As Double
  168.    
  169.    
  170.     With ThisWorkbook.Sheets(wsName1)
  171.          pAdd = .Range(.Cells(1, 1), .Cells(rowsCount, colsCount)).Address
  172.          lrNum = Application.CentimetersToPoints(0.8)
  173.          tbNum = Application.CentimetersToPoints(0.5)
  174.          hfNum = Application.CentimetersToPoints(0.5)
  175.    
  176.         With .PageSetup
  177.             .PrintArea = pAdd
  178.             .CenterHorizontally = True  ' 内容水平居中
  179.             ' .CenterVertically = True    ' 内容垂直居中
  180.             .PaperSize = xlPaperA4      ' A4纸张
  181.             .Zoom = False               ' 禁用缩放
  182.             .FitToPagesWide = 1: .FitToPagesTall = False    ' 强制1页宽,高度自适应(不限定页数)
  183.             .LeftMargin = lrNum: .RightMargin = lrNum       ' 左右页边距:0.8厘米
  184.             .TopMargin = tbNum: .BottomMargin = tbNum       ' 上下页边距:0.5厘米
  185.             .HeaderMargin = hfNum: .FooterMargin = hfNum    ' 页眉页脚边距:0.5厘米
  186.         End With
  187.     End With
  188.     On Error GoTo 0
  189. End Sub

  190. Private Sub SetApps(Isopen As Boolean)
  191.     With Application
  192.         .DisplayAlerts = Isopen: .ScreenUpdating = Isopen
  193.         .Calculation = IIf(Isopen, xlAutomatic, xlManual)
  194.     End With
  195. End Sub

  196. Private Sub LastRow(rng As Range, retnum As Long)
  197.     Dim rng1 As Range
  198.     If rng.Worksheet.FilterMode Then rng.Worksheet.ShowAllData
  199.     Set rng1 = rng.Find("*", LookIn:=xlValues, _
  200.                         searchorder:=xlByRows, _
  201.                         searchdirection:=xlPrevious)
  202.     If rng1 Is Nothing Then retnum = 0 Else retnum = rng1.Row
  203.     Set rng1 = Nothing
  204. End Sub
复制代码
模板可有可无

003_批量生成标签并调整打印.7z

164.05 KB, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-11-12 17:40 | 显示全部楼层
自荐一下我的插件,免费的,适合Office2013+
自编的插件Excel助手更新V1.3-VSTO-ExcelHome技术论坛 -

可以制作各种这种类型的批量复制,模板自己调整好,包括字体,样式等等。
第一步,给模板设定数据参数:
批量制作1.gif
第二步,选择数据,设定布局,输出
批量制作2.gif

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-11-12 23:17 | 显示全部楼层
Enocheasty 发表于 2025-11-12 17:40
自荐一下我的插件,免费的,适合Office2013+
自编的插件Excel助手更新V1.3-VSTO-ExcelHome技术论坛 -

看着很不错,很好!就是这个软件下载不了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-11-13 13:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-11-13 16:36 | 显示全部楼层
绿色心情小天使 发表于 2025-11-13 13:08
经测试,有好多清空.....

源文件是没有这些控件的,这个也不需要清空内容,每次都是重新生成

TA的精华主题

TA的得分主题

发表于 2025-11-13 16:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
massCS 发表于 2025-11-13 16:36
源文件是没有这些控件的,这个也不需要清空内容,每次都是重新生成

已上传附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-11-13 20:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

晚上好:
      感谢大力相助!
     还有一个问题,打印第2页和第三页时,没有显示全部,上半空了一大截,如下图。
    3-2.png
   3-3.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-7 21:25 , Processed in 0.027882 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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