VBA实例之Excel台账 人员资质及证件管理
问题引入
大多数中小型企业并不会花费额外的价钱购买文件管理系统,打工人每天重复录入信息、制表、绘图、排版等等,无疑是个异常枯燥乏味且没有意义的过程。VBA虽然已经过时了,但依旧是提高办公效率的一个不错的选择。这里为什么不用Python,明明Python具有更高效更便捷的优势?主要原因是Excel内置py的插件都是付费的,而且订阅费用不低。让公司掏这个钱显然是不现实的,我于是从去年开始重拾VBA,
思路
- one_image_aspect:当复制粘贴一张图像到Excel单元格中时,进行初步的格式处理。
- image_aspect:根据给定的宽高值(分别对应单元格L2与N2中的值)对头像列与证件列行高、列宽进行调整,同时遍历当前激活的表中所有图像,调整图像宽高值。图像名赋值到所在单元格。
- avatar:a.当头像列没有头像时,检查身份证正面列有无头像,若有,通过复制与裁剪生成头像;b.进一步调整头像格式。
- TextBox1_Change:a.筛选姓名;b.筛选姓名和单位名称 输入文本时姓名与单位名称中间加空格。
快捷键设置
不会用快捷键的打工人不是合格的打工人。
快捷键的设置仅为个人习惯,在人员信息管理台账、隐患排查治理台账、标识标签管理台账与事故管理台账等文件体系中,我习惯用以下三组快捷键作为默认快捷键。
one_image_aspect:Ctrl + M
image_aspect:Ctrl + Shift + M
avatar:Ctrl + Shift + X
效果
Excel截屏
为便于展示,在网上找了几组证件的图像(侵删)。
视频演示
视频审核中,待插入……
具体实现
代码很简单,语法和算法不做赘述。需要注意的是,在Excel中,图像并非单元格中的值,不能通过访问单元格中值来获取图像的相关参数。较为常用的一种做法是,遍历图像,通过图像左上角(其他角亦然)所在单元格地址来判断从属关系。VBA因为未知问题,在图像处理过程中容易报错,建议对图像进行压缩处理,压缩为220ppi,以减少故障率。
单个图片
Sub one_image_aspect()
Dim image_width As Single, image_height As Single
Dim name As String, idx As Integer, shp As ShapeRange, tlc_address As String
image_width = Cells(2, "L")
image_height = Cells(2, "N")
Application.ScreenUpdating = False
Rows(Selection.Cells(1, 1).Row).RowHeight = Application.CentimetersToPoints(image_height) + 4
ActiveSheet.Paste
Set shp = Selection.ShapeRange
shp.Left = Selection.Left + 2
shp.Top = Selection.Top + 2
shp.LockAspectRatio = msoFalse
shp.Width = Application.CentimetersToPoints(image_width)
shp.Height = Application.CentimetersToPoints(image_height)
Application.ScreenUpdating = True
End Sub
对所有图像进行排版
Sub image_aspect()
Dim image_width As Single, image_height As Single
Dim name As String, idx As Integer, shp As Shape, tlc_address As String
Application.ScreenUpdating = False
Range(Cells(1, "A"), Cells(1, "H")).Borders(xlEdgeLeft).Weight =