Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 综合其它

自己开发的access程序调用bartender自动生成二维码、条形码并打印标签

时 间:2018-12-05 12:10:06
作 者:水若寒   ID:37925  城市:邛崃
摘 要:自己开发的access程序调用bartender自动生成二维码、条形码并打印标签
正 文:

  最近我遇到了需要打印资产标签的情况,之前的做法是先在开发的系统里把资产信息填写好,然后打开用bartender制作的标签模板,标签连接数据库,打印时选择想要的记录再打印。这样的操作也能实现,但是很不方的是,在一大堆记录里查找我想打印的很麻烦,虽然连接数据库那里也能写SQL语句或者设置筛选条件,但是打印那里不能设置,每次需要两边切换。很早我就知道这个软件很强大,支持其它软件调用打印,于是我就想研究一下,能不能把它集成到我开发的系统上。经过两天时间的研究,我终于成功实现在我的系统里直接打印标签,现在我将整个过程记录一下,以便以后查询,同时也分享给有同样需求的小伙伴,避免再走弯路。

  在bartender官网上找不到关于集成的文档,都是一些基础操作的。又网上找了一大圈,倒是找到了一些,但是是其它语言的集成资料,后来好不容易找了一份EXCEL VBA集成的文章,还提供了源码,然后我就开始在我的系统制作打印界面,其实就是在原来的界面添加打印按钮而已,把代码放入单击事件,并进行相应的调整。我修改后的代码如下:

Private Sub btnPrint_Click()
    
    Dim file_path As String
    Dim btApp As BarTender.Application
    Dim btFormat As BarTender.Format


    '设置标签模板文件的路径
    file_path = "\\server\打印标签\IT资产标签.btw"
    Set btApp = CreateObject("bartender.application")
    btApp.Visible = True    'true为打印时显示bartender主程序界面
    Set btFormat = btApp.Formats.Open(file_path)

    '第一个参数为标签上的“命名子字串”,第二个参数是要传递过去的值
    btFormat.SetNamedSubStringValue "type", Me.sfrList![资产类型]
    btFormat.SetNamedSubStringValue "serialNumber", Me.sfrList![出厂编号]
    btFormat.SetNamedSubStringValue "name", Me.sfrList![资产名称]
    btFormat.SetNamedSubStringValue "QRCode", Me.sfrList![资产ID]
    btFormat.SetNamedSubStringValue "barCode", Me.sfrList![资产ID]

    btFormat.PrintSetup.IdenticalCopiesOfLabel = 1 '设置打印的份数
    '第一个true为显示打印状态窗口,第二true为显示打印对话框(这里必须要加参数,最初的代码无参,不仅不打印还害我程序卡死了N回)
    btFormat.PrintOut True, True
    '设置打印完毕不保存对标签文件的更改(只打印好像它也会认为有修改)
    btFormat.Close btDoNotSaveChanges
    btApp.Quit

End Sub


  添加代码后还要添加引用,直接将bartender安装目录下的bartend.exe文件添加进引用里面,添加好后如下图所示。

  然后我就开始测试,点打印按钮后,代码老是报“运行时错误429:ActiveX 部件无法创建对象”的错误,调试发现代码执行到这里:Set btApp = CreateObject("bartender.application"),无论怎么重新引用控件,也按在软件网找到的同学的方法,重新注册了所有控件都不得行,于是又开始在网上找解决办法。这次是什么办法都试了,也没有解决,我自己都打算放弃了,忽然想到,会不会是我的bartender专业版软件版本不行,别人EXCEL都只是引用就可以,我也同样引用没有错啊。于是我又仔细看了一遍那篇文章,截图比较小,我放大看非常模糊,但还是依稀看出了对方所用的bartender版本是automation版的,我想起这个软件分了很多个版本的,估计专业版不支持。于是我将软件重新配置成automation版,再次测试打印,对了,果然没有再报429错误了。

  但是又出现了新问题,报“未找到已命名子字串”错误,调试发现代码走到“btFormat.SetNamedSubStringValue "type", Me.sfrList![资产类型]”,开始给标签传值了,打桩输出检查了值也是正确获取的,看来问题是出在标签上了。于是我又到标签上查找原因。又查看了bartender操作手册,网上搜索,都无果。偶然发现数据源上有个已命名子字串,里面是空的。

点击图片查看大图

  原因可能就在这里,我在标签的常规属性中设置的对象名只是标签对象字符串名称,而传递过来的值要给已命名子字串,但我这里面是空的,于是我开始研究如何添加已命名子字串,到处找都没有这方面的介绍,实在没有办法,我又准备放弃了。但我心想,前面那么多难题我都解决了,这最后一步放弃,是不是太可惜了。于是又静下心来,一个功能一个功能去测试、检查。偶然间,我在标签数据源设置里面的“共享/名称”里面输入文字,发现显示在已命名子字串里面了,嗨,原来是在这里设置,害我差点就放弃了。

点击图片查看大图

  这下子,我将标签数据源绑定的数据库全部删除,改为屏幕数据,就是标签只接收传递的数据,不需要主动去连接数据库了。全部修改完毕。再次测试点打印按钮,能调出bartender软件打开我的标签了,并且标签上的数据全部是我传递过去的。测试打印,正常打印出标签。终于大功告成。剩下的就是完善相应的程序界面,把需要打印的地方都添加按钮和代码,以及修改对应的标签。全部完工后,直接在开发系统中打印出标签,瞬间觉得自己开发的系统变得高大上了,哈哈。

  说明一下,二维码和条形码直接使用bartender的控件,传递值给其后会自动生成相应的码。




Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助