全國(guó)中等職業(yè)學(xué)校學(xué)生管理信息系統(tǒng)(簡(jiǎn)稱為新中職學(xué)生系統(tǒng))是2014年更新后的學(xué)生信息管理系統(tǒng),新生錄入模板(V1.2版本號(hào))也是2014年9月24日更新的。其中“批量自動(dòng)生成”功能非常實(shí)用,可以根據(jù)學(xué)生的身份證號(hào)自動(dòng)生成:性別、出生日期、行政區(qū)劃碼等,給錄入教師帶來(lái)了很多方便。但是,凡是參加過(guò)這次新生學(xué)籍錄入工作的老師,對(duì)學(xué)籍信息上傳后出現(xiàn)的行政區(qū)劃碼錯(cuò)誤都會(huì)印象深刻。這是由于行政區(qū)劃碼是不斷調(diào)整變化的(地市縣合并或撤消導(dǎo)致行政區(qū)劃碼也改變或撤消),而身份證號(hào)是唯一不變的,所以根據(jù)身份證前六位數(shù)自動(dòng)生成的行政區(qū)劃碼就有一些是錯(cuò)誤的。當(dāng)我們把采集完信息的新生錄入模板上傳后,數(shù)據(jù)庫(kù)會(huì)根據(jù)字典里的行政區(qū)劃碼去檢驗(yàn)上傳信息里的區(qū)劃碼,如果有字典里不存在的區(qū)劃碼出現(xiàn),就會(huì)被標(biāo)識(shí)為錯(cuò)誤,從而被駁回,要求更改后再重新上傳。這個(gè)錯(cuò)誤問(wèn)題非常普遍、集中,錄入教師自己很難查找出錯(cuò)誤的行政區(qū)劃碼,所以只能是上傳數(shù)據(jù)發(fā)現(xiàn)錯(cuò)誤后下載再改正,因此大大延長(zhǎng)了數(shù)據(jù)上傳的時(shí)間。為了把這個(gè)問(wèn)題解決在數(shù)據(jù)上傳之前,筆者制作了區(qū)劃碼查錯(cuò)小助手,有了這個(gè)小助手,不僅自己可以輕松發(fā)現(xiàn)錯(cuò)誤代碼,還可以根據(jù)區(qū)劃碼自動(dòng)生成戶口所在地,輕松減少錄入工作量。
下面介紹這個(gè)小助手的兩種制作方法(兩種制作方法適合不同性質(zhì)的學(xué)校使用,同時(shí)也適合不同階段查錯(cuò)時(shí)使用)。
方法一:新建一個(gè)工作?。ㄊ褂?010版以下的電子表格),建立兩個(gè)工作表:“檢查”、“字典”。在“字典”工作表里,完成如下操作:
1.在第一、二行的“CD”列下方設(shè)置一個(gè)命令按鈕(方法:點(diǎn)擊“視圖”菜單下“工具欄”中的“控件工具箱”,打開“控件工具箱”后,點(diǎn)擊工具箱左邊第一個(gè) “設(shè)計(jì)模式”圖標(biāo),再點(diǎn)擊左數(shù)第六個(gè)“命令按鈕”圖標(biāo),在C列和D列下方拖曳鼠標(biāo)畫出“命令按鈕”)。右擊“命令按鈕”選擇“屬性”,在“屬性”窗口修改“Caption”右側(cè)內(nèi)容為“獲取行政區(qū)劃碼”。
2.雙擊“獲取行政區(qū)劃碼”命令按鈕,在打開的代碼窗口中,輸入以下代碼(加粗代碼不用輸入):
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 = "沒(méi)有找到戶籍所在地的人員有:" & Chr(13)
Msg_hk = Msg_hk & "行 ? ? ?姓名 ? ? ? ? ?身份證號(hào)碼 ? " & Chr(13)
Range("A3:J10000").Delete
MsgBox "選擇含有字典的學(xué)生數(shù)據(jù)模板文件", 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 = "數(shù)據(jù)處理中,請(qǐng)稍等..."
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("學(xué)生基礎(chǔ)信息").[A65536].End(xlUp).Row
heWorkBook.Worksheets("字典").Range("A1:A" & rows_zdsj).Copy myWorkbook.Worksheets("字典").Range("A3")
heWorkBook.Worksheets("學(xué)生基礎(chǔ)信息").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") = "行政區(qū)域名稱"
Range("C3") = "行政區(qū)劃碼"
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
點(diǎn)擊工具箱第一個(gè)“退出設(shè)計(jì)模式”圖標(biāo)。完成“字典”的代碼錄制。
3. 點(diǎn)擊“獲取行政區(qū)劃碼”命令按鈕,即可一鍵完成行政區(qū)劃碼的檢查與戶口所在地信息的錄入(前提是學(xué)生的姓名、身份證號(hào)信息已全部錄入,并已點(diǎn)擊“批量自動(dòng)生成”按鈕生成行政區(qū)劃碼)。
執(zhí)行結(jié)果說(shuō)明:如果姓名等字段以藍(lán)色背景顯示,同時(shí)“戶口所在地”為空,說(shuō)明該生自動(dòng)生成的行政區(qū)劃碼是錯(cuò)誤的??筛鶕?jù)該生學(xué)籍檔案信息錄入“戶口所在地”,最后把全部的戶口所在地信息重新復(fù)制到數(shù)據(jù)模板中,同時(shí)到“字典”中查詢錯(cuò)誤信息對(duì)應(yīng)的正確行政區(qū)劃碼進(jìn)行數(shù)據(jù)模板中區(qū)劃碼的修改。
此方法適合錄入身份證信息后使用(尤其適合縣級(jí)?;虺醮武浫牖拘畔r(shí)使用)。因?yàn)樗粌H可以檢查出錯(cuò)誤的行政區(qū)劃碼,還可以減少我們錄入戶口所在地時(shí)的文本信息錄入量。
方法二:新建一個(gè)工作?。ㄊ褂?010版以下的電子表格),建立兩個(gè)工作表:“檢查”、“字典”
一、“字典”工作表的建立
1. 在第一、二行C列和D列下方設(shè)置一個(gè)命令按鈕(方法同上)。設(shè)置“屬性”窗口中“Caption”右側(cè)內(nèi)容為“獲取行政區(qū)劃碼”。
2. 雙擊“獲取行政區(qū)劃碼”命令按鈕,在打開的代碼窗口中,輸入以下代碼(加粗代碼不用輸入):
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 "選擇含有字典的學(xué)生數(shù)據(jù)模板文件", 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 = "數(shù)據(jù)處理中,請(qǐng)稍等..."
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") = "行政區(qū)域名稱"
Range("C3") = "行政區(qū)劃碼"
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
點(diǎn)擊工具箱第一個(gè)“退出設(shè)計(jì)模式”圖標(biāo)。完成“字典”的代碼錄制。
3. 點(diǎn)擊“獲取行政區(qū)劃碼”命令按鈕,在“字典”工作表中創(chuàng)建行政區(qū)劃碼查詢信息(此命令執(zhí)行一次即可)。
二、“檢查”工作表的建立
1. 在第一、二行的C列和D列下方創(chuàng)建一個(gè)命令按鈕(方法同上),并設(shè)置屬性中Caption內(nèi)容為“開始檢查”。
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 "選擇已錄完信息的學(xué)生數(shù)據(jù)模板文件", 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 = "數(shù)據(jù)處理中,請(qǐng)稍等..."
Application.DisplayAlerts = False
Set myWorkbook = Workbooks(1)
Set heWorkBook = Workbooks.Open(tmpFileList, 0, vbReadOnly)
rows_xssj = heWorkBook.Worksheets("學(xué)生基礎(chǔ)信息").[A65536].End(xlUp).Row
heWorkBook.Worksheets("學(xué)生基礎(chǔ)信息").Range("A3:E" & rows_xssj).Copy myWorkbook.Worksheets("檢查").Range("A3")
heWorkBook.Worksheets("學(xué)生基礎(chǔ)信息").Range("R3:R" & rows_xssj).Copy myWorkbook.Worksheets("檢查").Range("F3")
heWorkBook.Close
Range("A3").Select
Worksheets("檢查").Activate
With Worksheets("檢查")
.Range("F3") = "行政區(qū)劃碼 "
.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) = "錯(cuò)誤"
End If
Line1:
Next m
End With
End If
Application.StatusBar = False
Application.DisplayAlerts = True
End Sub
點(diǎn)擊工具箱第一個(gè)“退出設(shè)計(jì)模式”圖標(biāo)。完成“檢查”的代碼錄制。
3. 點(diǎn)擊“開始檢查”命令按鈕,選擇數(shù)據(jù)模板文件(該模板中已錄完新生身份證信息),即可檢查出錯(cuò)誤的行政區(qū)劃碼,對(duì)出現(xiàn)“錯(cuò)誤”的行政區(qū)劃碼進(jìn)行修改后即可上傳。
4. 多次點(diǎn)擊“開始檢查”命令按鈕,即可完成對(duì)多個(gè)新生模板信息的區(qū)劃碼檢查。
執(zhí)行結(jié)果說(shuō)明:錯(cuò)誤的行政區(qū)劃碼以藍(lán)色背景顯示其姓名等信息,同時(shí)“行政區(qū)劃碼”字段后方顯示“錯(cuò)誤”兩字。
此方法尤其適合省(地市州)校對(duì)所屬各縣市校上報(bào)的數(shù)據(jù)進(jìn)行二次檢查使用,當(dāng)然它也適合錄完信息后對(duì)行政區(qū)劃碼的第二次查錯(cuò)使用。
兩種查錯(cuò)方法的區(qū)別:方法一是根據(jù)身份證號(hào)來(lái)檢查區(qū)劃碼的錯(cuò)誤,方法二是對(duì)已錄入的區(qū)劃碼來(lái)檢查錯(cuò)誤。各位老師可根據(jù)自己的需要來(lái)選擇使用哪種方法查錯(cuò)。建議實(shí)際使用時(shí),在錄入新生的姓名和身份證號(hào)后,可用方法一來(lái)檢查區(qū)劃碼的錯(cuò)誤與戶口所在地的輸入。在錄完全部信息后,用方法二再次重查一下是否有錯(cuò)誤的區(qū)劃碼。兩次查過(guò)后,相信不會(huì)再有錯(cuò)誤的區(qū)劃碼。