午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

【代碼】VBA自定義函數(shù):考試多項(xiàng)選擇題判分;山東高考數(shù)學(xué)多選題判分解決方法

 冷茶視界 2024-10-10 發(fā)布于江蘇

內(nèi)容提要

  • 考試多選題判分|完整代碼
1、在工作表“Sheet1”里,命令按鈕點(diǎn)擊事件,工作表Change事件,調(diào)用判分過(guò)程:
Private Sub CmdScore_Click()    Dim arr(), i As Long, rng As Range    Dim lRow As Long    lRow = UsedRange.Rows.Count    Set rng = Cells(1, 1).Resize(lRow, 4)    arr = rng.Value    For i = 2 To UBound(arr)        arr(i, 4) = getScore(6, CStr(arr(i, 3)), CStr(arr(i, 2)))    Next    rng.Value = arr    MsgBox "Done!"End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim currRow As Long If Target.CountLarge > 1 Then Exit Sub If Target.Row > 1 Then If Target.Column = 2 Or Target.Column = 3 Then currRow = Target.Row Cells(currRow, 4) = getScore(6, CStr(Cells(currRow, 3)), CStr(Cells(currRow, 2))) End If End IfEnd Sub
2、在myModule里,getScore自定義函數(shù),根據(jù)相應(yīng)參數(shù)得出分?jǐn)?shù):
Option ExplicitFunction getScore( _        totalScore As Integer, _        rightAnswer As String, _        studentAnswer As String)    '//totalScore:單題總分    '//rightAnswer:正確答案    '//studentAnswer:學(xué)生答案    Dim unitScore As Double    Dim currScore As Double    Dim i As Integer        '//答案都轉(zhuǎn)為大寫    rightAnswer = UCase(rightAnswer)    studentAnswer = UCase(studentAnswer)        '//如果標(biāo)準(zhǔn)答案為空,退出函數(shù)    If rightAnswer = "" Then Exit Function        '//每個(gè)選項(xiàng)得分    unitScore = Round(totalScore / Len(rightAnswer), 2)    If studentAnswer = "" Or Len(studentAnswer) > Len(rightAnswer) Then            '//如果學(xué)生答案為空或者多于標(biāo)準(zhǔn)答案,得0分        getScore = 0        Exit Function    End If        '//循環(huán)判斷學(xué)生答案的每個(gè)選項(xiàng),如果沒(méi)有錯(cuò)誤選項(xiàng),按答對(duì)個(gè)數(shù)得分,    '//否則,得0分    For i = 1 To Len(studentAnswer)        If InStr(rightAnswer, Mid(studentAnswer, i, 1)) > 0 Then            currScore = currScore + unitScore        Else            getScore = 0            Exit Function        End If    Next    getScore = currScoreEnd Function
在這個(gè)案例中,我們使用了工作表Change事件,但跟昨天的案例【更新:科目余額表逐級(jí)匯總,工作表Change事件,自動(dòng)刷新匯總數(shù)據(jù);Application.EnableEvents屬性】有所不同,我們沒(méi)有用EnableEvents屬性,運(yùn)行速度也沒(méi)有影響,原因是我們工作表Change事件中的Target只是第2、第3列,在點(diǎn)擊命令按鈕批量得分的時(shí)候,第2、第3列的值是不會(huì)變的,應(yīng)該不會(huì)觸發(fā)工作表的Change事件。


~~~~~~End~~~~~~

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多