ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 批量制作二维码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-25 14:55 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ctp_119 于 2023-2-25 14:58 编辑

这段时间,稍微清闲一点,以前零零散散的知识,一直都没有整理,这几天刚好有这种欲望,于是就动手整理了。

用代码批量制作二维码大致有三种方法:
一:用MS Office2016自带控件BarCode制作(仅能识别字母和数字)
二:用第三方QRmaker控件制作(默认状态下,仅能识别字母和数字,若要识别汉字,即支持中文,可以用自定义函数将中文转换为UTF8编码,然后用InputDateB属性值即可;
三:纯代码制作(全能型,无限制)
Barcode方法:
手工制作方法:
untitled1.jpg

单击开发工具->插入->其他控件,在其他控件对话框中选Microsoft BarCode Control 16.0,单击确定按钮,
untitled2.jpg

用鼠标在工作表中画出一个方框即可,如图所示:
untitled3.png
剩下的事情,就是设置相关属性即可
untitled4.png

右键单击控件->在弹出的快捷菜单中选中对象属性,在弹出的属性对话框中设置样式:11-QR Code,确定即可,其他可以不用设置。确定之后,就变为二维码形
untitled5.jpg
式了,如下图所示:
untitled6.png
右键单击控件,在弹出的快捷菜单中选属性,弹出属性对话框中设置LinkedCell
untitled7.jpg

Value的属性值即可,如下图:
untitled8.png

手工制作完毕










评分

6

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-25 14:57 | 显示全部楼层
下面用代码批量生成二维码:

  1. Sub 生成二维码()
  2.     Dim Row As Integer
  3.     Row = Range("A1").End(xlDown).Row
  4.     For i = 1 To Row
  5.         With ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1")
  6.             .Left = Range("B1").Left
  7.             .Top = Cells(i, 2).Top
  8.             .Width = 100
  9.             .Height = 100
  10.             .Object.Style = 11   '这句代码是关键,设置样式成二维码,否则就是条形码
  11.             .LinkedCell = "A" & i
  12.             Cells(i, 2).ColumnWidth = .Width / 6.33
  13.             Cells(i, 2).RowHeight = .Height
  14.         End With
  15.     Next
  16. End Sub
复制代码
这个控件如何使用就介绍到这里,希望多加练习。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-25 15:11 | 显示全部楼层
本帖最后由 ctp_119 于 2023-2-25 15:23 编辑

二、用QRmaker制作方法
因为这个控件是第三方控件,那就必须下载安装后,才可以使用。
下载就不必过多说了,输入QRmaker相关关键字下载即可,解压后如下图所示:
untitled1.png
把其中的6个文件(或全部)复制粘贴到C:\Windows\System32(如果系统是64位的,复制粘贴到C:\Windows\SysWOW64)目录下面即可
接下来就是开始->运行,用regsvr32命令来安装,如下图:
untitled2.png

如果是32位系统,路径稍作修改即可。
安装好后,后期绑定应该可以用了,如果是前期绑定还得做如下操作:
进入VBE编辑器,工具菜单->引用->浏览,找到刚才粘贴到的文件夹中,筛选出文件格式,找到QRmaker文件,打开即可,操作过程如下图:
注意:Qrmaker.lic Qrmaker.tlb文件仅仅在开发使用ActiveX控件的程序中使用。运行时不需要
untitled3.jpg

期工作就算结束了,接下来是如何使用它!
手工制作方法,和QR Code类似,剩下的都是属性的设置,不同的控件,属性不同。
untitled4.png

untitled5.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-25 15:35 | 显示全部楼层
下表中的属性都是生成二维码时需要配置的属性,用户可以自定义。其中几个关键的已经用黄颜色标明+
属性
类型
默认值
/
取值范围
定义
AutoRedraw
short
0
R/W
0/1
打开/关闭自动绘制模式
Bend
short
-1
R
>0
返回需要编码的字符串最后一个字符的位置
Bstart
short
0
R
>0
返回需要编码的字符串循环的开始位置
CellAdjust
short
0
R/W
设置一个单元纠正值,单位为dpi
CellPitch
short
(*)
以块中心为原点,设置块与块之间的距离。随着CellPitch的变化,CellAdjust也会发生相应的变化。
CellUnit
short
(*)
R/W
>1
设置打印机分辨率(in dpi)
ecclevel
short
1
r?w
0-3
设置纠错级别
0对应L等级(最大纠错率为:7%)
1对应M等级(最大纠错率为:15%)
2对应Q等级(最大纠错率为:25%)
3对应H等级(最大纠错率为:30%)
InputData
r/w
输入要编码的字符串
ModelNo
short
2
r/w
1-3
设置QR码的模式
numcell
short
r
返回创建的额QR码图像中每条边上的单元个数
picture
r
返回创建的二维码图片
QuietZone
5
r/w
设置二维码页边距(周围空白区域宽度)
Rotate
short
0
r.w
0-3
设置图片旋转角度(0,90.180,270)
TextOrBinary
0
r
返回当前编码模式,文本还是二进制



这个控件默认状态下是不支持中文的,于是为了支持中文,我可没少花时间来琢磨,最后找的了一段自定义函数代码,用上这个,万事大吉:

untitled1.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-25 15:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
  2. Private Const CP_UTF8 = 65001
  3. Public Function UTF8_Encode(ByVal strUnicode As String) As Byte()
  4. 'UTF-8 编码
  5.     Dim TLen As Long
  6.     Dim lngBufferSize As Long
  7.     Dim lngResult As Long
  8.     Dim bytUtf8() As Byte
  9.       
  10.     TLen = Len(strUnicode)
  11.     If TLen = 0 Then Exit Function
  12.       
  13.     lngBufferSize = TLen * 3 + 1
  14.     ReDim bytUtf8(lngBufferSize - 1)
  15.       
  16.     lngResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(strUnicode), TLen, bytUtf8(0), lngBufferSize, vbNullString, 0)
  17.       
  18.     If lngResult <> 0 Then
  19.         lngResult = lngResult - 1
  20.         ReDim Preserve bytUtf8(lngResult)
  21.     End If
  22.       
  23.     UTF8_Encode = bytUtf8
  24. End Function
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-25 15:37 | 显示全部楼层
下面是在Excel用该控件制作的支持中文的二维码,如下图
untitled1.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-25 15:38 | 显示全部楼层
源码如下:
  1. Sub 二维码制作()
  2. Dim i As Integer
  3. Dim qr As Object
  4. Dim qn As String
  5. Dim shp As Object
  6. For Each shp In ActiveSheet.Shapes
  7.     If VBA.Left(shp.Name, 7) = "QRmaker" Then
  8.         shp.Delete
  9.     End If
  10. Next
  11. For i = 2 To Range("A65536").End(xlUp).Row
  12.     Set qr = Application.ActiveSheet.OLEObjects.Add(ClassType:="QRMAKER.QRmakerCtrl.1", Top:=Cells(i, 2).Top, Left:=Cells(i, 2).Left, Height:=Cells(i, 2).Height - 2, Width:=Cells(i, 2).Width - 2, Link:=False, DisplayAsIcon:=False)
  13.     qr.Name = "QRmaker" & i
  14.     qn = qr.Name
  15.     With ActiveSheet.OLEObjects(qn).Object
  16.         .ModelNo = 2
  17.         .CellPitch = 20
  18.         .CellUnit = 200
  19.         .QuietZone = 0
  20.         .InputDataB = UTF8_Encode(Cells(i, 1).Value) '转为UTF8编码输入可以处理中文
  21.         .AutoRedraw = ArOn
  22.         .Refresh
  23.     End With
  24. Next i
  25. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-25 15:45 | 显示全部楼层
第三种方法,我就不发了,都在附件中,想学习的下载附件:


QRMaker控件.rar (1.36 MB, 下载次数: 116)


二维码制作.rar (1.23 MB, 下载次数: 133)



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-25 19:44 来自手机 | 显示全部楼层
我认为谷歌的开源项目zxing已足够好,速度足够快,支持几十种条码和二维码的生成和识别,不仅仅是QR二维码。

TA的精华主题

TA的得分主题

发表于 2023-2-25 21:17 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 00:38 , Processed in 0.049235 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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