资产清查的后期工作需要根据核查结果打印出资产标签。
先设置设备的二维码所包含的信息,然后打印出二维码,再根据结果打印每个设备的标签,裁剪后贴到设备标签上即可。
这样就完成了资产台账上的设备记录与实物的一一对应。
打印二维码的插件和控件有很多,我找到一个,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参数是用来指定一个文件夹。