提取身份证号码的特定信息
许多用户径常使用Excel函数来提取身份证号码的相关信息,其实利用Word的Application 事件也能完成这样的工作,如图287-1所示。
图287-1 输入身份证号码后自动提取相关信息的表格
中国公民的身份证号码是一种特征组合码,早期的为15位,现在的为18位。
15位号码的规律:从第7位至第8位是出生的年份,第9位至第10位是出生的月份,第11位至第12位是出生的日子,最后3位是顺序码,其中顺序码的最后一位是判断性别的根本,最后一位是奇数是男性,偶数则是女性。
18位号码的规律:从第7位至第10位是出生的年份,第11位至第12位是出生的月份,第13位至第14位是出生的日子,第15至17位是顺序码,最后1位是校验码。其中顺序码的最后一位是判断性别的根本,即号码的倒数第二位是奇数则是男性,偶数则是女性。
下面利用这个规律,结合Application事件来演示此过程。
步骤一按如图287-1所示的样式制作3个表格,并在相应的位置分别填入“姓名:”、“身份证号码:”、“性别:”、“出生年月:”。
步骤二按<Alt+F11>组合键打开【Visual Basic编辑器】窗口,依次单击菜单【插入】→【类模块】,在【属性】窗口中修改类模块的名称为“clsIDCard”,如图287-2所示。
图287-2 插入一个类模块,并修改其名称
步骤三在类模块“cls DCard”的代码窗口中输入如下代码。
Public WithEvents App As Word.Application
'声明一个包含事件的Application 类型对象
Private Sub App_WindowSelectionChange(ByVal Sel As Selection)
On Error Resume Next
Dim idString As String, idLen As Integer
Dim sYear As String, sMonth As String
如何办理网银Dim sYearAndMonth As String
Dim sLadyOrGentleman As String
Dim isSex As String
Dim isSexChar As Integer
With Selection.Tables(1)
idString = .Range.Cells(5).Range.Text
idLen = Len(idString)
'如果是15位的身份证
If idLen = 17 Then
'确定年月
sYear = Mid(idString, 7, 2)
sMonth = Mid(idString, 9, 2)
sYearAndMonth = "19" & sYear & "年" & sMonth & "月"
.Range.Cells(9).Range.Text = sYearAndMonth
'确定性别
isSexChar = Mid(idString, idLen - 2, 1)
If isSexChar Mod 2 = 0 Then
isSex = "女"
sLadyOrGentleman = "小"
Else
isSex = "男"
sLadyOrGentleman = "先生"
End If
.Range.Cells(7).Range.Text = isSex
.Range.Cells(3).Range.Text = sLadyOrGentleman
下雨天的心情经典句子适合发朋友圈的短句.Range.Cells(5).Range.Font.Color = wdColorBlack
陆小凤与花满楼片尾曲'如果是18位的身份证
ElseIf idLen = 20 Then
sYear = Mid(idString, 7, 4)
sMonth = Mid(idString, 11, 2)
sYearAndMonth = sYear & "年" & sMonth & "月"
.Range.Cells(9).Range.Text = sYearAndMonth
'确定性别
isSexChar = Mid(idString, idLen - 3, 1)
If isSexChar Mod 2 = 0 Then各省份简称
isSex = "女"
我的合租美女老师sLadyOrGentleman = "小"
Else
isSex = "男"
sLadyOrGentleman = "先生"
End If
.Range.Cells(7).Range.Text = isSex
.Range.Cells(3).Range.Text = sLadyOrGentleman
.Range.Cells(5).Range.Font.Color = wdColorBlack
Else
.Range.Cells(5).Range.Font.Color = wdColorRed
.Range.Cells(7).Range.Text = ""
.Range.Cells(3).Range.Text = ""伤残等级鉴定
.Range.Cells(9).Range.Text = ""
End If
End With
End Sub
简要解析:
表格的单元格的text属性包括形如“段落标记”及“单元格符”,对应的分别是Chr(13)与Chr(7),所从15位的身份证号码使用了“If idLen = 17 Then”,18位也是同样的道理。
实现的原理就是上面介绍的身份证规律。
双击“工程资源管理器”窗口的ThisDocument节点打开This Document模块的代码窗口,输入如下代码。
Dim newWord As New clsIDCard
'初始化类
Private Sub Document_open()
'将类模块中已声明的对象(本例中为App)连接到Application 对象
Set newWord.App = Word.Application
End Sub
步骤五将光标放在Document_open过程中,按下<F5>键,在表格的“身份证号码:”右侧的单元格中输入相应的身份证号码,Word会自动在相应的位置生成对应的内容。
如果身份证的位数输入不正确,则此身份证号码变成红,且清空相应位置的内容,如图288-1中的第2个表格。
以后,这个文档只要打开时选择启用宏,就可以一直使用这个功能,而不用去运行宏,即它在打开事件时就已经运行了。
注意:虽然编写定义Word.Application事件的新对象有时能够满足用户的“即改即显”的效果,但是,它也有很多负面影响。例如,如果WindowSelectionChange事件写得较为复杂,则会在操作Word过程中,光标的停顿延时会非常明显,会直接影响用户的操作体验。
本篇文章节选自《Word 2010实战技巧精粹》ISBN:9787115276759 人民邮电出版社
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论