DataMatrix 条形码支持 - 通过 VBA 而不是公式触发

DataMatrix barcode support - trigger via VBA rather than formula

提问人:maxxev 提问时间:1/18/2023 更新时间:6/6/2023 访问量:515

问:

我通过 Patratacus 答案中的这个问题找到了这个优秀的代码;使用 Excel VBA 生成二维(PDF417 或 QR)条形码

然而,代码远远超出了我的范围,我在制作数据矩阵条形码标签时遇到了不一致的问题,我相当确定这是由于时间原因(每 4 个左右的条形码都会扫描产品的详细信息)。

我相信这是因为代码正在获取一个值,将其放入一个命名范围内,然后将一些值索引/匹配到其他单元格中,并将文本连接起来以生成条形码的值。我认为如果我在子例程完成后通过 VBA 调用条形码更新,而不是使用公式生成它,这在第一个值更新后立即发生,则可以解决这个问题。

该代码具有触发 QR 条形码类型的内置方式,但不适用于 Data Matrix。

Sub Test_RenderQRCode()
    Call RenderQRCode(Application.ActiveSheet.Name, "A2", "Hello World", "mode=M", False)
End Sub

谁能为我提供如何为 DM 格式做到这一点?

老实说,我什至不知道如何开始使用代码来做到这一点。 我尝试在我的代码中使用优化代码(例如禁用应用程序更新、计算等),在单元格值更改时触发条形码,但它没有解决问题。

Excel VBA 条码打印 数据矩阵

评论


答:

0赞 cuprumx 6/6/2023 #1

对于 DataMatrix,它可以是这样的:

Sub Test_RenderDMXCode()
   Call RenderDMXCode(Application.ActiveSheet.Name, "A2", "Hello World", True) 
End Sub

Public Sub RenderDMXCode(workSheetName As String, cellLocation As String, textValue As String, Optional addLabel As Boolean)
   Dim s_param As String
   Dim s_encoded As String
   Dim xSheet As Worksheet
   Dim QRShapeName As String
   Dim QRLabelName As String

   s_encoded = dmx_gen(textValue, "")
   Call DrawQRCode(s_encoded, workSheetName, cellLocation)

   Set xSheet = Worksheets(workSheetName)
   QRShapeName = "BC" & "$" & Left(cellLocation, 1) _
       & "$" & Right(cellLocation, Len(cellLocation) - 1) & "#GR"

   QRLabelName = QRShapeName & "_Label"

   With xSheet.Shapes(QRShapeName)
       .Width = 25
       .Height = 25
   End With

   On Error Resume Next
   If Not (xSheet.Shapes(QRLabelName) Is Nothing) Then
       xSheet.Shapes(QRLabelName).Delete
   End If

'Additonal text on right
   If IsMissing(addLabel) Then
      addLabel = True
   End If
   If addLabel Then
       xSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
           xSheet.Shapes(QRShapeName).Left + 35, _
           xSheet.Shapes(QRShapeName).Top, _
           Len(textValue) * 6, 30) _
           .Name = QRLabelName
    
    
       With xSheet.Shapes(QRLabelName)
           .Line.Visible = msoFalse
           .TextFrame2.TextRange.Font.Name = "Arial"
           .TextFrame2.TextRange.Font.Size = 9
           .TextFrame.Characters.text = textValue
           .TextFrame2.VerticalAnchor = msoAnchorMiddle
       End With
   End If
End Sub

子“RenderQRCode”与使用 Excel VBA 生成 2D(PDF417 或 QR)条形码中所述相同