上一篇讲了在VBA里使用For循环来批量提取身份证出生日期,今天这个案例接着往下讲并且增加新的知识点,如何录制宏与指定宏。

在Excel VBA相关书籍与教程里,一般先讲录制宏为开始,我这里想尝试不一样的思路来讲Excel VBA入门,所以第一篇就先讲自定义函数,随后用简单的案例并且逐步深入来串联知识点。

现在开始讲解,先回顾一下上篇的案例与代码,都放在图里了,请看图:

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(1)

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(2)

上面两张图是上一次讲的内容,详细的讲解看上一篇文章,这里不再描述了。现在身份证号上的出生日期是提取出来了,但是这个日期其实并不标准,如果在表格里,它显示的是文本形式并非日期型。如果说用VBA办公自动化的标准来评判,其实并不 “合格” 。因为代码执行完后还是需要办公人员来手动给它转成日期型,等于还是手工作业并不是办公自动化。所以引申出了今天的内容,给B列录制宏,让B列的文本数据转成日期型。录制的宏代码补进原有循环代码里面,让做出来的数据符合处理要求。

来看一下怎么操作,首先鼠标点击【开发工具】选项卡,在【代码】子选项里选择 “录制宏” ,点击确定。

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(3)

会跳出一个对话框,不用管它,点 “确定”:

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(4)

接下去的操作,里面的 “宏” 已经帮用户记录了,先选择 “B列”

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(5)

看到这里,熟悉表格工作的读者已经知道怎么回事了,类似于这样的文本型日期需要通过 “分列” 的方式来转成日期型格式。请继续往下看:

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(6)

点 “下一步”

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(7)

不用去管它,继续点下一步:

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(8)

到第3步的时候已经差不多了,选择到日期,点完成。来看看最终的结果:

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(9)

不要忘记,结束录制

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(10)

选择 “停止录制”,这样一来这个宏就录制好了,按Alt F11查看一下录制好的宏代码

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(11)

由于是录制的宏看上去比较 “机器化”,我们只要选择性去复制里面的代码就能拿来用了。

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(12)

显而易见,红框里面的代码讲的就是对B列的一系列操作是可以用来移植到我们原有的代码里去的,现在我把代码复制进去。

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(13)

这样一来代码完善好了,删除原有的B列,用上面新代码重新运行一遍,最终效果还是一样的。

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(14)

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(15)

不仅如此,这段加进了宏代码的新代码直接一步到位,给出了正确的日期格式。

录制宏已经讲完了,其实录制宏对新手是很有用处的,如果发现代码实在写不出可以用录制宏的方法来写代码并加以利用及学习参考,日积月累下必定会提高自己写VBA代码水平。

最后讲一下指定宏,简单讲就是插入一下控件按钮通过指定宏来绑定写好的代码,实现自动化操作。

因为不难,图片一起上吧:

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(16)

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(17)

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(18)

在 “指定宏” 下,小按钮已经做出来了,以后直接按按钮就能自动提取出生日期并规范数据格式了。最后,还有一个小问题要解决,就是由于是For循环的方式,原先的For循环写死了,发现没有?是固定的第2行到第11行,以后如果A列的数据还要增加那么代码就废掉了。所以代码还需要小修改,改写成动态的行号。如图显示:

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(19)

完整代码:

Sub 循环方式() Dim i As Integer For i = 2 To Range("A65536").End(xlUp).Row Range("B" & i) = Mid(Range("A" & i), 7, 8) Next i Columns("B:B").Select Selection.TextToColumns Destination:=Range("B1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(0, 5), TrailingMinusNumbers:=True Columns("B:B").EntireColumn.AutoFit End Sub

Range("A65536").End(xlUp).Row,这样写行号就写活了,解决了行号不确定的问题,感兴趣的话可以自行百度一下。

excel vba 259个常用宏(ExcelVBA录制宏与指定宏)(20)

来看一下效果,后面A列数据再怎么增加也不影响,只要不超过65536最大行数,为什么要65536,为了兼容早期的Excel版本。实际工作中也足够用了。

今天的内容就讲到这儿,其实代码还可以改写成其他形式,完全不需要通过录制宏的方法来改日期格式的,以后再介绍。

,