使用VBA打印二维码和资产标签

  资产清查的后期工作需要根据核查结果打印出资产标签。

  先设置设备的二维码所包含的信息,然后打印出二维码,再根据结果打印每个设备的标签,裁剪后贴到设备标签上即可。

  这样就完成了资产台账上的设备记录与实物的一一对应。

  打印二维码的插件和控件有很多,我找到一个,QRmaker.ocx,注册一下就可以在VBA中使用。

Regsvr32 QRMAKER.OCX

  在VBA的【附加控件】 中可以找到该控件。

  生成二维码比较简单:

    QRmaker1.InputData = TextBox1.Text
    QRmaker1.AutoRedraw = ArOn
    QRmaker1.Refresh
    Image1.Picture = QRmaker1.Picture
    DestFileName = "D:\二维码图片\" & SZCBM & ".jpg"
    If Dir(DestFileName) <> "" Then
        Kill DestFileName
    End If
    SavePicture Image1.Picture, DestFileName

  有了二维码,就可以生成资产标签了。

  [2024年3月27日添加] 

  注意点:注册时需要“以管理员身份”运行CMD,也不要加“/s”的静默注册(如果出错没有提示),如果要拷贝到系统目录下,需要拷贝到windows/SysWOW64(一般也不需要)。
  错误代码0x80040200一般是指的是权限不足导致的错误。

  标签打印使用的Word文档中的书签,就是将指定输入信息的位置上放置书签,然后根据书签输入相应的信息。

    Dim wordApp As Object
    Dim wordDoc As Object
    Dim ws As Worksheet
    Dim LastRow As Integer
    Dim iFor As Integer
    Dim pic As InlineShape
    Dim ZCMC As String  '资产名称
    Dim GGXH As String  '规格型号
    Dim DWMC As String  '单位名称
    Dim SDate As String '出厂日期
    Dim ZCBM As String  '资产编码
    Dim SNO As String   '出厂编码
    Dim BKZCMC As Range
    Dim BKGGXH As Range
    Dim BKDWMC As Range
    Dim BKNO As String
    Dim BKEWM As String
    Dim FileEWM As String
    Dim SaveAsFile As String
    
    wordFile = "F:\固定资产标签.doc"
    
    Set wordApp = CreateObject("word.application")
    Set wordDoc = wordApp.Documents.Open(wordFile, Visible:=True)
    wordApp.Visible = True
    Set ws = Worksheets("资产标签打印表")
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
       
    If LastRow < 50 Then
        For iFor = 2 To LastRow - 1
            BKNO = Trim(String(3 - Len(Trim(Str(iFor - 1))), "0") + Trim(Str(iFor - 1)))
            '提取相应的信息
             DWMC = Trim(UCase(GetCellValue("B" + Trim(Str(iFor)))))          '单位名称
             ZCBM = Trim(UCase(GetCellValue("L" + Trim(Str(iFor)))))          '资产编码
             If DWMC = SelectDWMC And ZCBM <> "" Then
                SaveAsFile = "F:\固定资产标签-" & DWMC & ".doc"
                If Dir(SaveAsFile) <> "" Then
                    Kill SaveAsFile
                End If
                ZCMC = "【" & Trim(UCase(GetCellValue("E" + Trim(Str(iFor))))) & "】" & Trim(UCase(GetCellValue("F" + Trim(Str(iFor)))))
                GGXH = Trim(UCase(GetCellValue("G" + Trim(Str(iFor)))))
                Debug.Print "|" & "资产名称" & BKNO & "|"
                BKEWM = "二维码" & BKNO
                FileEWM = "F:\二维码图片\" & ZCBM & ".jpg"
                
                ActiveDocument.Bookmarks("资产名称" & BKNO).Range.Text = ZCMC
                ActiveDocument.Bookmarks("规格型号" & BKNO).Range.Text = GGXH
                ActiveDocument.Bookmarks("单位名称" & BKNO).Range.Text = DWMC
                Set pic = ActiveDocument.Bookmarks(BKEWM).Range.InLineShapes.AddPicture(FileEWM, LinkToFile:=False, SaveWithDocument:=True)
                Sleep 200
                Debug.Print iFor
             End If
        Next
    Else
        MsgBox "标签数目超过50,请修改模板文件!"
    End If
    
    Sleep 2000
    wordDoc.Close savechanges:=False
    Set wordDoc = Nothing
    wordApp.Quit
    Set wordApp = Nothing

  资产标签样式:

   原先我使用PowerBuilder打印过资产标签,现在使用VBA来做更快更省事。

  附:VBA中常用函数

1、字符串函数列表:
	Trim(string)          去掉string左右两端空白
	Ltrim(string)         去掉string左端空白
	Rtrim(string)         去掉string右端空白
	Len(string)           计算string长度
	Left(string, x)       取string左段x个字符组成的字符串
	Right(string, x)      取string右段x个字符组成的字符串
	Mid(string, start,x) 取string从start位开始的x个字符组成的字符串
	Ucase(string)         转换为大写
	Lcase(string)         转换为小写
	Space(x)              返回x个空白的字符串
	Asc(string)           返回一个integer,代表字符串中首字母的字符代码
	Chr(charcode)          返回string,其中包含有与指定的字符代码相关的字符

2、转换函数列表:
	CBool(expression)      转换为Boolean型
	CByte(expression)     转换为Byte型
	CCur(expression)      转换为Currency型
	CDate(expression)   转换为Date型
	CDbl(expression)      转换为Double型
	CDec(expression)      转换为Decemal型
	CInt(expression)      转换为Integer型
	CLng(expression)      转换为Long型
	CSng(expression)      转换为Single型
	CStr(expression)      转换为String型
	CVar(expression)      转换为Variant型
	Val(string)          转换为数据型
	Str(number)           转换为String

3、时间函数:
	Now       返回一个Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。
	Date     返回包含系统日期的Variant (Date)。
	Time      返回一个指明当前系统时间的Variant (Date)。
	Timer     返回一个Single,代表从午夜开始到现在经过的秒数。
	TimeSerial(hour, minute, second)返回一个Variant (Date),包含具有具体时、分、秒的时间。
	DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])返回Variant (Long)的值,表示两个指定日期间的时间间隔数目
	Second(time)返回一个Variant (Integer),其值为0到59之间的整数,表示一分钟之中的某个秒
	Minute(time)返回一个Variant (Integer),其值为0到59之间的整数,表示一小时中的某分钟
	Hour(time)返回一个Variant (Integer),其值为0到23之间的整数,表示一天之中的某一钟点
	Day(date)返回一个Variant (Integer),其值为1到31之间的整数,表示一个月中的某一日
	Month(date)返回一个Variant (Integer),其值为1到12之间的整数,表示一年中的某月
	Year(date)返回Variant (Integer),包含表示年份的整数。
	Weekday(date, [firstdayofweek])返回一个Variant (Integer),包含一个整数,代表某个日期是星期几

4、获取文件列表:
	Dir[(pathname[, attributes])];
	pathname可选参数,用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串("");
	attributes可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配pathname但不包含属性的文件。

5、删除文件:
	Kill pathname	从磁盘中删除文件, pathname参数是用来指定一个文件名;
	RmDir pathname	从磁盘中删除删除目录,pathname参数是用来指定一个文件夹。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值