BarTender 通过事件脚本VBScript实现打印扣减库存功能

条码老陈09-0326阅读0评论

近期我们收到客户反馈,其标签打印流程完全基于 BarTender 设计,并通过“数据库设置”连接 Excel 文件实现动态数据打印。客户提出希望在保留现有系统架构的基础上,实现以下功能:

1.打印完成后自动扣减 Excel 中对应产品的库存数量; 

2.当库存不足时,能及时弹出警告提示,并中止打印。

该需求的核心在于“数据写回”——然而 BarTender 的数据库连接功能默认仅支持读取 Excel,无法直接写入。因此,我们需借助 BarTender 的事件脚本功能(基于 VBScript),在打印时动态操作 Excel 文件,将其视为一个轻量级数据库来实现库存的实时更新。

本文将介绍一种无需更换数据源、无需引入额外开发工具的实现方法,重点解析技术思路与关键实践细节。

        实现原理:通过 VBScript 脚本操控 Excel 实现写回

        BarTender 虽不能直接回写 Excel,但可通过 VBScript 脚本在“打印前”事件中完成以下操作:

  • 启动 Excel 应用程序(通过 COM 接口);

  • 打开指定的 Excel 库存文件;

  • 读取当前库存 → 判断是否充足 → 执行扣减 → 保存文件;

  • 关闭 Excel 进程。

        该做法相当于绕过 BarTender 的数据库只读限制,直接操作底层 Excel 文件,实现动态更新。

      关键实现步骤与代码说明

1. 拦截预览模式,避免误扣减

BarTender 的打印预览也会触发事件脚本,必须加以拦截,否则预览时也会扣减库存:

If Format.IsPrintPreview Then
    MsgBox "当前为预览模式,不执行库存扣减。", vbInformation    Exit SubEnd If

2. 获取当前打印的货号与数量

Dim partNo, printQty '这里按照示例数据源名称请替换为自己的
partNo = Trim(Format.NamedSubStrings("货号").Value)
printQty = Format.NamedSubStrings("打印数量").Value

3. 动态构建 Excel 库存文件路径

使用 FileSystemObject 动态获取 Excel 文件的路径,增强脚本的可移植性:

' 构建 Excel 路径
Dim fso, templateDir, excelPath
Set fso = CreateObject("Scripting.FileSystemObject")
templateDir = Format.Directory
If Right(templateDir, 1) <> "\" And Right(templateDir, 1) <> "/" Then
    templateDir = templateDir & "\"
End If
excelPath = fso.BuildPath(templateDir, "DEMO.xlsx") '数据文件需要与模板在同级目录下

4. 连接 Excel 并定位数据表

通过 COM 接口启动一个隐藏的 Excel 实例,并打开目标文件:

On Error Resume Next ' 防止因异常导致 BarTender 崩溃
Dim xlApp, xlBook, xlSheet
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open(filePath)
Set xlSheet = xlBook.Sheets("库存表")

5.读取库存并执行判断逻辑

从 Excel 中读取的库存可能是文本类型,必须转换为数值后再进行比较:

If currentStock < printQtyNum Then
    MsgBox "错误:库存不足!" & vbCrLf & _
           "货号:" & targetPartNo & vbCrLf & _
           "当前库存:" & currentStock & ",需要:" & printQtyNum, vbCritical, "库存不足"
    xlBook.Close False
    xlApp.Quit
    Set xlApp = Nothing
    Format.CancelPrinting '取消打印
    Exit Sub
End If

6. 扣减库存并保存退出

xlSheet.Cells(foundRow, 4).Value = currentStock - printQtyNum
On Error Resume Next
xlBook.Save
xlBook.Close True 
xlApp.Quit
' 释放对象
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Set fso = Nothing

下面为完整功能演示,有此类需求的可以联系老陈。

动画.gif


文章版权声明:除非注明,否则均为BarcodeX贝恪原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,26人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码