excel - 用于生成二维码的 VBA 代码,但代码从哪里开始?
问题描述
为了工作,我必须生成一些包含信息的二维码。因此,我在网上查了一下,发现了这个“已经制作”的二维码生成器:
https://github.com/JonasHeidelberg/barcode-vba-macro-only
它非常好,而且效果很好。
在使用代码创建最终的二维码之前,我正在尝试将其集成到我的 VBA 表中以进行数据处理。(没什么复杂的)
这是它的样子: 4 个单元格“B4 到 B6”获取是否编码的条目数据,具体取决于复选框,然后将结果写入 D 列。每个单元格内容都堆叠在一个变量中,并且这个变量被提供给二维码生成器:
Public Function GenerateQRCode()
Dim CurrentWS As String
UserDataRange = "B6:B9" 'The cells in which the data to be encoded are stored
InputDataRange = "D6:D9" 'the cells with the encoded (or not) values
InputCell = "A4" 'the cell where the text to be encoded in the QR code has to be put
'encode the text depending on hte value of the cell behind the chek boxes
For Each cell In Range(UserDataRange)
If cell.Offset(0, 1) = True Then
EncodedText = EncodeDecode.Base64EncodeString(cell.Value)
cell.Offset(0, 2).Value = EncodedText
ElseIf cell.Offset(0, 1) = False Then
cell.Offset(0, 2).Value = cell.Value
End If
Next
Range(InputCell).ClearContents
DataToEncode = ""
'puts the text in the input line with dashes between each value
For Each cell In Range(InputDataRange)
pouet = Range(InputDataRange).Address
If DataToEncode = "" Then
DataToEncode = cell.Value & Chr(10)
Else
If cell.Address = Mid(Range(InputDataRange).Address, InStr(1, Range(InputDataRange).Address, ":") + 1, _
Len(Range(InputDataRange).Address) - (InStr(1, Range(InputDataRange).Address, ":") - 1)) Then
DataToEncode = DataToEncode & cell.Value
Else
DataToEncode = DataToEncode & cell.Value & Chr(10)
End If
End If
Next
Range(InputCell).Value = DataToEncode
End Function
我担心的是“无论我在整个工作簿中修改什么单元格,它都会占用 QR 码生成器。”
我想在代码的开头给出一个条件If cell A4 is modified, lunch the code
,但我什至无法理解是什么让代码开始以及如何收集数据......
我最好的猜测是这是代码的开头:
Public Function EncodeBarcode(ShIx As Integer, xAddr As String, _
code As String, pbctype%, Optional pgraficky%, _
Optional pparams%, Optional pzones%) As String
Dim s$, bctype%, graficky%, params%, zones%
Dim oo As Object
Call Init
If IsMissing(pzones) Then zones = 2 Else zones = pzones
If IsMissing(pparams) Then params = 0 Else params = pparams
If IsMissing(pgraficky) Then graficky = 1 Else graficky = pgraficky
If IsMissing(pbctype) Then bctype = 0 Else bctype = pbctype
但它是如何开始的?哦
我认为像Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean)
控制“目标”值这样的行是强制性的......在这里,它对我来说看起来很神奇:(
如何xAddr
获取我单击的单元格的地址?又是魔法……
我希望仅在单击创建的按钮时才执行代码。(它会生成一些无限循环并且 excel 关闭:/)或者,如果不可能,我希望它仅在单元格 A4 中的数据被修改时执行。
谢谢你的帮助 :)
解决方案
这是因为CELL 函数函数是不稳定的,它会在每次计算时重新计算(不仅在它所依赖的单元格中的计算上)。这意味着也EncodeBarcode()
计算每次计算(因为它CELL()
在其参数中使用该函数)。
一个易失函数是一个导致在Excel 每次重新计算时重新计算其所在单元格中的公式的函数。无论公式所依赖的先例数据和公式是否已更改,或者公式是否还包含非易失性函数,都会发生这种情况。
如果您删除该CELL()
功能并将其替换为硬值
=EncodeBarcode(1;"B4";A4;51;1;0;2)
它不会在每个单元格更改时重新计算条形码。但它只会在它依赖的单元格发生变化时重新计算条形码(本例中的单元格 A4)。
推荐阅读
- python - 尝试使用 GeoJson、Python 和 rasterio 裁剪图像时出现问题
- json - 如何在不改变Objective C中小数点的情况下将JSON数据(字典)转换为JSON字符串?
- python - 如果元数据不存在,PDF-Plumber 提取标题
- c# - Intellisense 中未显示接口重载的 .Net 文档
- android - 持续检查应用更新的最佳方式
- r - 如何使用 XPath 从网页中抓取值
- python-3.x - 在 python 上使用 Yahoo Financials 时出现 WinError 10060
- visual-studio - 如果文件夹不存在,MSBuild 创建文件夹
- vue.js - beforeinstallprompt 不会在 PWA 的 Vue 应用程序中触发
- archunit - ArchUnit 规则来测试@Service 只依赖于自己包中的@Repository?