全国中等职业学校学生管理信息系统(简称为新中职学生系统)是2014年更新后的学生信息管理系统,新生录入模板(V1.2版本号)也是2014年9月24日更新的。其中“批量自动生成”功能非常实用,可以根据学生的身份证号自动生成:性别、出生日期、行政区划码等,给录入教师带来了很多方便。但是,凡是参加过这次新生学籍录入工作的老师,对学籍信息上传后出现的行政区划码错误都会印象深刻。这是由于行政区划码是不断调整变化的(地市县合并或撤消导致行政区划码也改变或撤消),而身份证号是唯一不变的,所以根据身份证前六位数自动生成的行政区划码就有一些是错误的。当我们把采集完信息的新生录入模板上传后,数据库会根据字典里的行政区划码去检验上传信息里的区划码,如果有字典里不存在的区划码出现,就会被标识为错误,从而被驳回,要求更改后再重新上传。这个错误问题非常普遍、集中,录入教师自己很难查找出错误的行政区划码,所以只能是上传数据发现错误后下载再改正,因此大大延长了数据上传的时间。为了把这个问题解决在数据上传之前,笔者制作了区划码查错小助手,有了这个小助手,不仅自己可以轻松发现错误代码,还可以根据区划码自动生成户口所在地,轻松减少录入工作量。
下面介绍这个小助手的两种制作方法(两种制作方法适合不同性质的学校使用,同时也适合不同阶段查错时使用)。
方法一:新建一个工作薄(使用2010版以下的电子表格),建立两个工作表:“检查”、“字典”。在“字典”工作表里,完成如下操作:
1.在第一、二行的“CD”列下方设置一个命令按钮(方法:点击“视图”菜单下“工具栏”中的“控件工具箱”,打开“控件工具箱”后,点击工具箱左边第一个 “设计模式”图标,再点击左数第六个“命令按钮”图标,在C列和D列下方拖曳鼠标画出“命令按钮”)。右击“命令按钮”选择“属性”,在“属性”窗口修改“Caption”右侧内容为“获取行政区划码”。
2.双击“获取行政区划码”命令按钮,在打开的代码窗口中,输入以下代码(加粗代码不用输入):
Private Sub CommandButton1_Click()
Dim m, n, i, j, rows_zdsj, rows_xssj, rows_a As Integer
Dim Msg_hk, name_str As String
Dim find_qh As Boolean
Msg_hk = "没有找到户籍所在地的人员有:" & Chr(13)
Msg_hk = Msg_hk & "行 姓名 身份证号码 " & Chr(13)
Range("A3:J10000").Delete
MsgBox "选择含有字典的学生数据模板文件", vbInformation, "提醒"
Dim tmpFileName As String, FileNumber As Integer
Dim myWorkbook, heWorkBook As Workbook, tmpFileList, tmpFileIndex As Long
tmpFileList = Application.GetOpenFilename("Data File(*.xls),*.xls", , "选择文件", , MultiSelect:=False)
If VarType(tmpFileList) = vbBoolean Then
Exit Sub
Else
Application.ScreenUpdating = False
Application.StatusBar = "数据处理中,请稍等..."
Application.DisplayAlerts = False
Set myWorkbook = Workbooks(1)
Set heWorkBook = Workbooks.Open(tmpFileList, 0, vbReadOnly)
rows_zdsj = heWorkBook.Worksheets("字典").[A65536].End(xlUp).Row
rows_xssj = heWorkBook.Worksheets("学生基础信息").[A65536].End(xlUp).Row
heWorkBook.Worksheets("字典").Range("A1:A" & rows_zdsj).Copy myWorkbook.Worksheets("字典").Range("A3")
heWorkBook.Worksheets("学生基础信息").Range("A3:E" & rows_xssj).Copy myWorkbook.Worksheets("检查").Range("A3")
heWorkBook.Close
Columns("A:C").Select
Selection.NumberFormatLocal = "@"
Range("A3").Select
Columns("A:A").ColumnWidth = 48
Columns("B:B").ColumnWidth = 40
Columns("C:C").ColumnWidth = 13
Range("B3") = "行政区域名称"
Range("C3") = "行政区划码"
Range("A3:C3").Interior.ColorIndex = 37
j = 4
name_str1 = ""
Do While j <= [A65536].End(xlUp).Row
name_d = InStr(Range("A" & j), "(")
name_str2 = Range("A" & j)
Range("B" & j) = Left(name_str2, name_d - 1)
name_str1 = Right(Range("A" & j), 13)
Range("C" & j) = Left(name_str1, 12)
j = j + 1
Loop
i = 37
name_str = ""
Do While i <= Worksheets("字典").[A65536].End(xlUp).Row
If Right(Range("C" & i), 10) = "0000000000" Then
name_str = Range("B" & i)
Else
If Right(Range("C" & i), 8) <> "00000000" Then
Range("B" & i) = name_str & Range("B" & i)
End If
End If
i = i + 1
Loop
Range("A3").Select
Worksheets("检查").Activate
With Worksheets("检查")
.Range("F3") = "户口所在地"
.Range("A3:F3").Interior.ColorIndex = 35
.Columns("D:D").ColumnWidth = 12
.Columns("E:E").ColumnWidth = 30
.Columns("F:F").ColumnWidth = 40
rows_a = .[A65536].End(xlUp).Row
For m = 4 To rows_a
find_qh = False
n = 2
Do While Not (find_qh) And n <= Worksheets("字典").[A65536].End(xlUp).Row
If Left(.Range("E" & m), 6) & "000000" = Worksheets("字典").Range("C" & n) Then
find_qh = True
.Range("F" & m) = Worksheets("字典").Range("B" & n)
Else
n = n + 1
End If
If find_qh = True Then GoTo line1
Loop
If Not (find_qh) Then
Msg_hk = Msg_hk & m & " " & .Range("A" & m) & " " & .Range("E" & m) & Chr(13)
.Range("A" & m & ":E" & m).Interior.ColorIndex = 33
End If
line1:
Next m
End With
MsgBox Msg_hk
End If
Application.StatusBar = False
Application.DisplayAlerts = True
End Sub
点击工具箱第一个“退出设计模式”图标。完成“字典”的代码录制。
3. 点击“获取行政区划码”命令按钮,即可一键完成行政区划码的检查与户口所在地信息的录入(前提是学生的姓名、身份证号信息已全部录入,并已点击“批量自动生成”按钮生成行政区划码)。
执行结果说明:如果姓名等字段以蓝色背景显示,同时“户口所在地”为空,说明该生自动生成的行政区划码是错误的。可根据该生学籍档案信息录入“户口所在地”,最后把全部的户口所在地信息重新复制到数据模板中,同时到“字典”中查询错误信息对应的正确行政区划码进行数据模板中区划码的修改。
此方法适合录入身份证信息后使用(尤其适合县级校或初次录入基本信息时使用)。因为它不仅可以检查出错误的行政区划码,还可以减少我们录入户口所在地时的文本信息录入量。
方法二:新建一个工作薄(使用2010版以下的电子表格),建立两个工作表:“检查”、“字典”
一、“字典”工作表的建立
1. 在第一、二行C列和D列下方设置一个命令按钮(方法同上)。设置“属性”窗口中“Caption”右侧内容为“获取行政区划码”。
2. 双击“获取行政区划码”命令按钮,在打开的代码窗口中,输入以下代码(加粗代码不用输入):
Private Sub CommandButton1_Click()
Dim i, j, rows_zdsj, rows_xssj, rows_a As Integer
Dim str, str1, str2, name_str As String
Dim find_qh As Boolean
MsgBox "选择含有字典的学生数据模板文件", vbInformation, "提醒"
Dim tmpFileName As String, FileNumber As Integer, c As Range
Dim myWorkbook, heWorkBook As Workbook, tmpFileList, tmpFileIndex As Long
tmpFileList = Application.GetOpenFilename("Data File(*.xls),*.xls", , "选择文件", , MultiSelect:=False)
If VarType(tmpFileList) = vbBoolean Then
Exit Sub
Else
Application.ScreenUpdating = False
Application.StatusBar = "数据处理中,请稍等..."
Application.DisplayAlerts = False
Set myWorkbook = Workbooks(1)
Set heWorkBook = Workbooks.Open(tmpFileList, 0, vbReadOnly)
rows_zdsj = heWorkBook.Worksheets("字典").[A65536].End(xlUp).Row
heWorkBook.Worksheets("字典").Range("A1:A" & rows_zdsj).Copy myWorkbook.Worksheets("字典").Range("A3")
heWorkBook.Close
Columns("A:C").Select
Selection.NumberFormatLocal = "@"
Range("A3").Select
Columns("A:A").ColumnWidth = 48
Columns("B:B").ColumnWidth = 40
Columns("C:C").ColumnWidth = 13
Range("B3") = "行政区域名称"
Range("C3") = "行政区划码"
Range("A3:C3").Interior.ColorIndex = 37
j = 4
name_str1 = ""
Do While j <= [A65536].End(xlUp).Row
name_d = InStr(Range("A" & j), "(")
name_str2 = Range("A" & j)
Range("B" & j) = Left(name_str2, name_d - 1)
name_str1 = Right(Range("A" & j), 13)
Range("C" & j) = Left(name_str1, 12)
j = j + 1
Loop
i = 37
name_str = ""
Do While i <= Worksheets("字典").[A65536].End(xlUp).Row
If Right(Range("C" & i), 10) = "0000000000" Then
name_str = Range("B" & i)
Else
If Right(Range("C" & i), 8) <> "00000000" Then
Range("B" & i) = name_str & Range("B" & i)
End If
End If
i = i + 1
Loop
Range("A3").Select
End If
Application.StatusBar = False
Application.DisplayAlerts = True
End Sub
点击工具箱第一个“退出设计模式”图标。完成“字典”的代码录制。
3. 点击“获取行政区划码”命令按钮,在“字典”工作表中创建行政区划码查询信息(此命令执行一次即可)。
二、“检查”工作表的建立
1. 在第一、二行的C列和D列下方创建一个命令按钮(方法同上),并设置属性中Caption内容为“开始检查”。
2. 双击“开始检查”命令按钮,输入以下代码:
Dim m, n, rows_adsj, rows_xssj, rows_a As Integer
Dim str, str1, str2, name_str As String
Dim find_qh As Boolean
Range("A3:J10000").Delete
MsgBox "选择已录完信息的学生数据模板文件", vbInformation, "提醒"
Dim tmpFileName As String, FileNumber As Integer, c As Range
Dim myWorkbook, heWorkBook As Workbook, tmpFileList, tmpFileIndex As Long
tmpFileList = Application.GetOpenFilename("Data File(*.xls),*.xls", , "选择文件", , MultiSelect:=False)
If VarType(tmpFileList) = vbBoolean Then
Exit Sub
Else
Application.ScreenUpdating = False
Application.StatusBar = "数据处理中,请稍等..."
Application.DisplayAlerts = False
Set myWorkbook = Workbooks(1)
Set heWorkBook = Workbooks.Open(tmpFileList, 0, vbReadOnly)
rows_xssj = heWorkBook.Worksheets("学生基础信息").[A65536].End(xlUp).Row
heWorkBook.Worksheets("学生基础信息").Range("A3:E" & rows_xssj).Copy myWorkbook.Worksheets("检查").Range("A3")
heWorkBook.Worksheets("学生基础信息").Range("R3:R" & rows_xssj).Copy myWorkbook.Worksheets("检查").Range("F3")
heWorkBook.Close
Range("A3").Select
Worksheets("检查").Activate
With Worksheets("检查")
.Range("F3") = "行政区划码 "
.Range("A3:F3").Interior.ColorIndex = 35
.Columns("D:D").ColumnWidth = 12
.Columns("E:E").ColumnWidth = 30
.Columns("F:F").ColumnWidth = 30
rows_a = .[A65536].End(xlUp).Row
For m = 4 To rows_a
find_qh = False
n = 2
Do While Not (find_qh) And n <= Worksheets("字典").[A65536].End(xlUp).Row
If Range("F" & m) = Worksheets("字典").Range("C" & n) Then
find_qh = True
Else
n = n + 1
End If
If find_qh=True Then Goto line1
Loop
If Not (find_qh) Then
Range("G" & m) = "错误"
End If
Line1:
Next m
End With
End If
Application.StatusBar = False
Application.DisplayAlerts = True
End Sub
点击工具箱第一个“退出设计模式”图标。完成“检查”的代码录制。
3. 点击“开始检查”命令按钮,选择数据模板文件(该模板中已录完新生身份证信息),即可检查出错误的行政区划码,对出现“错误”的行政区划码进行修改后即可上传。
4. 多次点击“开始检查”命令按钮,即可完成对多个新生模板信息的区划码检查。
执行结果说明:错误的行政区划码以蓝色背景显示其姓名等信息,同时“行政区划码”字段后方显示“错误”两字。
此方法尤其适合省(地市州)校对所属各县市校上报的数据进行二次检查使用,当然它也适合录完信息后对行政区划码的第二次查错使用。
两种查错方法的区别:方法一是根据身份证号来检查区划码的错误,方法二是对已录入的区划码来检查错误。各位老师可根据自己的需要来选择使用哪种方法查错。建议实际使用时,在录入新生的姓名和身份证号后,可用方法一来检查区划码的错误与户口所在地的输入。在录完全部信息后,用方法二再次重查一下是否有错误的区划码。两次查过后,相信不会再有错误的区划码。