gpt4 book ai didi

excel - 用于生成二维码的VBA代码,但是代码从哪里开始呢?

转载 作者:行者123 更新时间:2023-12-03 03:09:04 27 4
gpt4 key购买 nike

为了工作,我必须生成一些包含信息的二维码。因此,我在网上查了一下,发现了这个“已经制作好的”二维码生成器:

https://github.com/JonasHeidelberg/barcode-vba-macro-only

非常好,而且效果很好。

我正在尝试将其集成到我的 VBA 表中以进行数据处理,然后再使用代码创建最终的 QR 码。 (没什么复杂的)

它是这样的: enter image description here4 个单元格“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 代码生成器。”

我想在代码的开头给出一个条件,例如如果单元格 A4 被修改,则执行代码,但我什至无法理解是什么使代码开始以及如何数据已收集...

我最好的猜测是这是代码的开头:

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

但是它是如何开始的呢? O.o

我认为像 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean) 这样的行,后面跟着“target”值的控制是强制性的......在这里,这对我来说就像魔法:(

xAddr 如何获取我单击的单元格的地址?魔法又来了...

我希望仅在单击我创建的按钮时才执行代码。 (它会生成一些无限循环,并且 excel 会关闭:/)或者,如果不可能,我希望它仅在单元格 A4 中的数据被修改时才执行。

感谢您的帮助:)

最佳答案

这是因为CELL function函数是易变的,它会在每次计算时重新计算(不仅在它所依赖的单元格中进行计算)。这意味着 EncodeBarcode() 也会对每个计算进行计算(因为它在其参数中使用 CELL() 函数)。

A Volatile Function is one that causes recalculation of the formula in the cell where it resides every time Excel recalculates. This occurs regardless of whether the precedent data and formulas on which the formula depends have changed, or whether the formula also contains non-volatile functions.

如果删除 CELL() 函数并将其替换为硬值

=EncodeBarcode(1;"B4";A4;51;1;0;2)

它不会在每次单元格更改时重新计算条形码。但它仅在其依赖的单元格发生变化时才重新计算条形码(在本示例中为单元格 A4)。

关于excel - 用于生成二维码的VBA代码,但是代码从哪里开始呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58992154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com