ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 不干胶 批量添加 条型码 二维码打印.

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-7-6 14:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大概18、19楼包含了敏感词,因为审核所以发重了。不好意思。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-6 14:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 boy8199 于 2020-7-6 15:01 编辑
jasonpdy 发表于 2020-7-6 11:28
我只是调用你的函数而已,没有啥代码。只改了  .Object.Style = 11
设我的函数参数设置方面的问题吗?
...

第二个参数 是 数组.

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-6 14:59 | 显示全部楼层
jasonpdy 发表于 2020-7-6 11:28
我只是调用你的函数而已,没有啥代码。只改了  .Object.Style = 11
设我的函数参数设置方面的问题吗?
...

vba 支持 中文变量,你直接调用即可.

第二个参数 是个数组,  是为了 批量生产 条形码.

你 直接定义 一个数组.   Dim 码值数组() As Variant

码值数组 = 数据表.Range(数据列号 & 数据开始行 & ":" & 数据列号 & 数据结束行)

然后 把 各个 参数 输进去 即可.


TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-6 15:06 | 显示全部楼层
本帖最后由 boy8199 于 2020-7-6 15:08 编辑
jasonpdy 发表于 2020-7-6 14:03
大概18、19楼包含了敏感词,因为审核所以发重了。不好意思。

那个 表名  不要 感叹号 "!" ,  不是 表的名称, 不是 在excel 你看到的那个名称(标题).  是 在vba里面看到的 表名.


而且 这个 不是 直接打印二维码

而是 生成 2维码 ,类似 先打印预览 .

现在 其他的 sheet 中 生成二维码,看看 有没有 错误,  然后 再 打印.

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-6 15:10 | 显示全部楼层
本帖最后由 boy8199 于 2020-7-6 16:49 编辑
  1. <div class="blockcode"><blockquote>'升级版,可跳首列,跳首行,间隔行

复制代码

  1. Public Function 批量添加条码(标签打印表 As Worksheet, 数据表 As Worksheet, 数据列号 As String, 数据开始行 As Long, 数据结束行 As Long) As Long
  2.    
  3.     Dim 码值数组() As Variant

  4.     If 数据开始行 < 1 Then 数据开始行 = 1
  5.    
  6.     If 数据结束行 < 数据开始行 Then 数据结束行 = 数据开始行
  7.    
  8.     If 数据开始行 = 数据结束行 Then
  9.         ReDim 码值数组(1 To 1, 1 To 1)
  10.         
  11.         码值数组(1, 1) = 数据表.Range(数据列号 & 数据开始行).Value
  12.     Else
  13.         码值数组 = 数据表.Range(数据列号 & 数据开始行 & ":" & 数据列号 & 数据结束行)
  14.     End If
  15.    
  16.    
  17.     批量条形码生成 条码打印表:=标签打印表, 条码数值数组:=码值数组, 开始序号:=3, 条码高度:=60, 条码宽度:=60, 每行个数:=5, _
  18.              单元格左边距:=3, 单元格上边距:=2, 开始行号:=3, 开始列号:=1, 行间隔数:=2, 列间隔数:=0
  19. End Function

  20. Private Function 批量条形码生成(条码打印表 As Worksheet, 条码数值数组() As Variant, 开始序号 As Long, _
  21.                 条码高度 As Long, 条码宽度 As Long, 每行个数 As Long, _
  22.                 Optional 单元格左边距 As Long = 1, Optional 单元格上边距 As Long = 1, _
  23.                 Optional 开始行号 As Long = 1, Optional 开始列号 As Long = 1, _
  24.                 Optional 行间隔数 As Long = 0, Optional 列间隔数 As Long = 0)

  25.   On Error GoTo errHandler
  26.    
  27.     Application.ScreenUpdating = False

  28.     Dim shp As Shape
  29.     If 条码打印表.Shapes.count > 0 Then

  30.         For Each shp In 条码打印表.Shapes

  31.           If shp.Type = msoOLEControlObject Then

  32.             Select Case shp.OLEFormat.Object.progID

  33.               Case "BARCODE.BarCodeCtrl.1"

  34.                 shp.Delete

  35.             End Select
  36.           End If
  37.         Next
  38.     End If
  39.    
  40.     Dim 序号 As Long        '第一行从第几列开始
  41.     Dim 条码左边距 As Long:    Dim 条码上边距 As Long
  42.     Dim 行号 As Long: Dim 列号 As Long

  43.     For 序号 = 开始序号 To 开始序号 + UBound(条码数值数组, 1) - 1

  44. '        条码左边距 = ((序号 - 1) Mod 每行个数) * 单元格宽度 * 6.208 + 单元格左边距'
  45. '        条码上边距 = Int((序号 - 1) / 每行个数) * 单元格高度 + 单元格上边距


  46.         行号 = 开始行号 - 1 + Int((序号 - 1) / 每行个数) + 1 + Int((序号 - 1) / 每行个数) * 行间隔数
  47.         列号 = 开始列号 - 1 + ((序号 - 1) Mod 每行个数) + 1 + ((序号 - 1) Mod 每行个数) * 列间隔数

  48.         条码左边距 = 条码打印表.Cells(行号, 列号).Left + 单元格左边距
  49.         条码上边距 = 条码打印表.Cells(行号, 列号).Top + 单元格上边距

  50.         If 条码数值数组(序号 - 开始序号 + 1, 1) <> "" Then

  51.             With 条码打印表.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", Link:=False, _
  52.                                          DisplayAsIcon:=False, Left:=条码左边距, Top:=条码上边距, _
  53.                                          Width:=条码宽度, Height:=条码高度)

  54.                 .Name = "myBarCodeCtr" & 序号  '设置条码控件名称
  55.                 .Object.Direction = 0    '条码横向\纵向
  56.                 .Object.Style = 11       '7 code128  '6 - code39码,需要以*号首尾  '11 二维码 '条形码数值太长,条码必须相应的加长
  57.                 .Object.LineWeight = 0
  58.                 .Object.Value = 条码数值数组(序号 - 开始序号 + 1, 1)
  59.                 .ShapeRange.ScaleHeight 1, msoFalse, msoScaleFromTopLeft
  60.                 .ShapeRange.ScaleWidth 1, msoFalse, msoScaleFromTopLeft

  61.             End With


  62.         End If

  63.     Next
  64.     Application.ScreenUpdating = True
  65.     Exit Function
  66. errHandler:
  67.    
  68.     Application.ScreenUpdating = True
  69.     MsgBox "添加条码出现错误: " & Err.Number & "-" & Err.Description
  70.    
  71. End Function
复制代码


TA的精华主题

TA的得分主题

发表于 2020-7-6 15:11 | 显示全部楼层
boy8199 发表于 2020-7-6 14:59
vba 支持 中文变量,你直接调用即可.

第二个参数 是个数组,  是为了 批量生产 条形码.

大神,我离你的差距实在太远了,你的指导我没法一下子看懂。。。

方便上传一个样表吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-6 15:16 | 显示全部楼层
把你的表给我, 我给你改一下. 你 复制一个副本即可.  就要 你那个 动态生成部分即可

我的用法 和你不太一样.

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-6 15:16 | 显示全部楼层
jasonpdy 发表于 2020-7-6 15:11
大神,我离你的差距实在太远了,你的指导我没法一下子看懂。。。

方便上传一个样表吗?

把你的表给我, 我给你改一下. 你 复制一个副本即可.  就要 你那个 动态生成部分即可

我的用法 和你不太一样.
我刚发了一个 升级版的. 正在审核

TA的精华主题

TA的得分主题

发表于 2020-7-6 15:28 | 显示全部楼层
boy8199 发表于 2020-7-6 15:16
把你的表给我, 我给你改一下. 你 复制一个副本即可.  就要 你那个 动态生成部分即可

我的用法 和你不 ...

附件表中,“标签打印3x3”是最后输出打印的页面,我标记了期望中二维码的位置及二维码应包含的信息内容。详见附件。

感谢!

标签打印_101收料_MB51_Alpha - 测试版本请勿使用.7z

780.2 KB, 下载次数: 17

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-6 15:39 | 显示全部楼层
jasonpdy 发表于 2020-7-6 15:28
附件表中,“标签打印3x3”是最后输出打印的页面,我标记了期望中二维码的位置及二维码应包含的信息内容 ...

你的 动态生成 哪去了?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 16:09 , Processed in 0.033101 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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