【代码】VBA自定义函数:考试多项选择题判分;山东高考数学多选题判分解决方法

文摘   教育   2024-10-10 22:35   江苏  

点【关于本公众号】了解一下,欢迎关注谢谢!

快速浏览

实用案例

|日期控件||简单的收发存||收费管理系(Access改进版)|

|电子发票管理助手||电子发票登记系统(Access版)|

|文件合并||表格拆分||审计凭证抽查底稿|

|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|

|印章使用登记系统|

收费使用项目

|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|

内容提要

  • 考试多选题判分|完整代码
1、在工作表“Sheet1”里,命令按钮点击事件,工作表Change事件,调用判分过程:
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自定义函数,根据相应参数得出分数:
Option ExplicitFunction getScore( _        totalScore As Integer, _        rightAnswer As String, _        studentAnswer As String)    '//totalScore:单题总分    '//rightAnswer:正确答案    '//studentAnswer:学生答案    Dim unitScore As Double    Dim currScore As Double    Dim i As Integer        '//答案都转为大写    rightAnswer = UCase(rightAnswer)    studentAnswer = UCase(studentAnswer)        '//如果标准答案为空,退出函数    If rightAnswer = "" Then Exit Function        '//每个选项得分    unitScore = Round(totalScore / Len(rightAnswer), 2)    If studentAnswer = "" Or Len(studentAnswer) > Len(rightAnswer) Then            '//如果学生答案为空或者多于标准答案,得0分        getScore = 0        Exit Function    End If        '//循环判断学生答案的每个选项,如果没有错误选项,按答对个数得分,    '//否则,得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
在这个案例中,我们使用了工作表Change事件,但跟昨天的案例【更新:科目余额表逐级汇总,工作表Change事件,自动刷新汇总数据;Application.EnableEvents属性】有所不同,我们没有用EnableEvents属性,运行速度也没有影响,原因是我们工作表Change事件中的Target只是第2、第3列,在点击命令按钮批量得分的时候,第2、第3列的值是不会变的,应该不会触发工作表的Change事件。


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

安利小店
安利的牙膏非常不错,用了以后就不想再用其他的了;洗洁精洗衣液也是日常必备,用过都说好!

合谷医疗
合谷医疗专攻各种疑难杂症,尤其擅长抑郁症焦虑失眠儿童神经发育异常多动症自闭孤独症腰颈椎疾病治疗,可谓神乎其技!体验过的直呼早点来就好了

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

  • Excel问题,请在文章下面留言讨论!或者加入我的付费交流群提问

  • 如需案例文件,请按当天另一篇文章末尾案例文件分享说明操作!

VBA编程实战
Excel应用案例、Excel VBA、公式函数使用技巧分享,思路解读...... 这里有鲜活案例、实用的技巧......
 最新文章