当前位置:首页 > 技术分析 > 正文内容

运用VBA技术完美解决PPT交互式单选试题的设计

ruisui881周前 (04-23)技术分析12

大家好,因为家里近期发生了点事情,所以很久没有更新头条作品,在这里跟各位粉丝说声抱歉。在昨天的微头条里,我预先给大家通知了我潜心准备的一个重磅级的头条作品。说实在的,为了这个作品,我在工作之余断断续续花了几天的时间,也废了很多功夫,真正的可以说实属不易。

还好,昨天将这个作品完美收关。说道这里,肯定很多粉丝非常好奇究竟是个什么作品呢?既然说到点子上了,我不卖关子地告诉大家,它就是关于在PPT试题课件中实现强力交互问题。如何强力交互?大家看我分享作品的过程就知道了。

这个作品呢,包含五大类试题类型:单选题、多选题、判断题、填空题、简答题等等。因为每个大题都有着缜密的知识技术,所以,我们准备分五次一个一个类型来分享,便于大家容易接受这些技术。好了,我们先来分享第一种类型的交互式单选试题课件设计,希望大家喜欢哦!

单选题在日常学习中也非常重要,但是在PPT中进行课件式的制作在设计上并不难,难就难在单选后的得分情况、选择与否等情况的呈现。既然很多朋友都用PPT制作展示课件式的文档,根据PowerPoint是Office的组件,我们则可以充分利用其后台强大的VBA开发技术实施Office前端的有效控制,从而实现强大的交互效果。好了,可能大家等不及了吧,下面我们现在即刻为各位分析设计过程。希望大家认真阅读哦!

一、交互式单选题试题PPT课件前端界面设计

首先是插入必要的文本框作为每小题的题干展示,然后是在【开发工具】功能选项卡面板里找到单选按钮,插入9个单选按钮,最后插入一个命令按钮。如下图所示

同时,修改命令按钮必要的属性。如下图所示

二、交互式单选题试题PPT课件后台功能代码实现

(一)模块1的实现代码

Sub OnSlideShowPageChange() '演示文档放映时即刻触发的事件

'如果当前播放的演示文档的幻灯片显示窗口的预览下,当前的显示定位为第一张幻灯片时,做一次初始化试题工作(这样就避免了每张幻灯 _

片跳变都要执行无谓的浪费资源式的初始化工作)

If ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 1 Then

Initialize_Choice '调用选择题选择题的初始选择状态

End If

End Sub

Sub Initialize_Choice() '初始化选择题的为未做任何选择状态

'单选题初始化

Dim ctr_single As Shape 'ctr_single为ActiveX控件(特别注意的是:PowerPoint幻灯片上面的控件皆作为图形的形式访问,要访问这 _

些“图形”式的ActiveX控件的属性必须采用“图形对象.OLEFormat.Object.属性”的形式进行)


singlechoice_aser_str_array = Array("A", "B", "C") '定义答案字符库数组
singlechoice_aser_str_array

little_subject_num = 0 'little_subject_num--统计试题小标题题目的个数

For Each shp In Slide1.Shapes

If InStr(shp.Name, "TextBox ") Then little_subject_num = little_subject_num + 1

Next

little_subject_num = little_subject_num - 1 'little_subject_num最终统计包含了试题大标题“一、单项选择题”,所以试题小标 _

题题目个数应该是必须减去1

'定义key_num_per_question为每个单项选择题的答案选项数目(间接获取数组上界+1)

key_num_per_question = UBound(singlechoice_aser_str_array) + 1

For k = 1 To little_subject_num 'k从1~little_subject_num道单选题的循环

'm、n分别为每一个选择题的答案选择项的起止

m = key_num_per_question * (k - 1) + 1

n = key_num_per_question * k

For i = m To n

Set ctr_single = Slide1.Shapes("OptionButton" & i)


ctr_single.OLEFormat.Object.Value = False '初始化所有答案选项为非选择状态

Next

Next

End Sub

Sub Single_Choice_Question() '单选题操作

'aswer--为暂存用户当前每题选择的答案,choice_result--几个题选择的结果,ctr_single为ActiveX控件(特别注意的是:PowerPoint _

幻灯片上面的控件皆作为图形的形式访问,要访问这些“图形”式的ActiveX控件的属性必须采用“图形对象.OLEFormat.Object.属性” _

的形式进行)

Dim aswer As String, choice_result As String, ctr_single As Shape

Dim select_key(0 To 2) As String '定义一个0~2下标范围的选择答案数组select_key


singlechoice_aser_str_array = Array("A", "B", "C") '定义答案字符库数组
singlechoice_aser_str_array

right_keys = Array("C", "A", "C") '定义并且初始化正确答案数组

aswer = "" '暂存用户当前每题选择的答案的变量,初始化为空

little_subject_num = 0 'little_subject_num--统计试题小标题题目的个数

For Each shp In Slide1.Shapes

If InStr(shp.Name, "TextBox ") Then little_subject_num = little_subject_num + 1

Next

little_subject_num = little_subject_num - 1 'little_subject_num最终统计包含了试题大标题“一、单项选择题”,所以试题小标 _

题题目个数应该是必须减去1

'定义key_num_per_question为每个选择题的答案选项数目(间接获取数组上界+1)

key_num_per_question = UBound(singlechoice_aser_str_array) + 1

For k = 1 To little_subject_num 'k从1~little_subject_num道题的循环

Unselected_Num = 0 '统计每小题未进行选择答案数目(判断是否每小题都未作任何选择的情况)

'm、n分别为每一个选择题的答案选择项的起止

m = key_num_per_question * (k - 1) + 1

n = key_num_per_question * k

For i = m To n

Set ctr_single = Slide1.Shapes("OptionButton" & i)

If
ctr_single.OLEFormat.Object.Value = True Then '如果当前控件访问的状态值为True(选中),则作如下选择的答案的在 _


singlechoice_aser_str_array数组中对应答案的下标获取存于t变量中

If i Mod key_num_per_question = 0 Then '如果当前每道题选择的答案单选钮控件序号对答案数目取余刚好为0,则直接将这个 _

答案数目赋予t

t = key_num_per_question

Else '否则,直接将余数赋予t

t = i Mod key_num_per_question

End If

aswer =
singlechoice_aser_str_array(t - 1) '获取选择的答案字符

select_key(k - 1) = aswer '同时将这个答案字符存于每题的选择答案数组中select_key

Else

Unselected_Num = Unselected_Num + 1 '每小题未进行单选答案数目统计

End If

Next

If Unselected_Num = key_num_per_question Then select_key(k - 1) = "[未进行单选]"

choice_result = choice_result & select_key(k - 1) & Space(1)

Next

right_key_num = 0 '定义并初始化一个正确答案数量变量right_key_num,初始化为0

For i = 0 To UBound(right_keys) '该循环是将所有题正确的答案从数组中转出类串联,同时统计正确的答案数量

r_key_str = r_key_str & right_keys(i) & Space(1) '将所有题正确的答案从数组中转出串联

If select_key(i) = right_keys(i) Then

right_key_num = right_key_num + 1 '统计正确的答案数量

End If

Next

r_key_str = Left(r_key_str, Len(r_key_str) - 1) '去掉尾部多余的空格

right_key_rate = "您选择的正确率为【" & Round(100 * right_key_num / (UBound(right_keys) + 1), 1) & "%】"

'以下即是间隔选择结果字符串、正确答案字符串、正确率字符串进行串接,然后显示

choice_result = "第1~" & little_subject_num & "道单项选择题您选择的答案分别是:" & Left(choice_result, Len(choice_result) - 1)

right_answers = "正确答案是:" & r_key_str

total_result = choice_result & Chr(10) & right_answers & Chr(10) & right_key_rate

MsgBox total_result, vbInformation, "答案揭晓"

End Sub

(二)Slide1里的必要代码

Private Sub Display_SingleChoince_Result_Btn_Click()

Single_Choice_Question '调用单选题操作过程

End Sub

三、交互式单选题试题PPT课件运行测试

(一)按<F5>键,进入演示文档放映状态。如下图

(二)未进行任何试题的单选时,直接点击<查看单选的结果和答案>按钮,将呈现无任何单选选择的结果状态。如下图

(三)只进行部份试题的单选时,点击<查看单选的结果和答案>按钮,将呈现部份单选选择的结果状态。如下图

(四)进行全部试题的单选后,点击<查看单选的结果和答案>按钮,将呈现全部单选选择的结果状态。如下图

四、本期技术小结

(一)特别注意的是:PowerPoint幻灯片上面的ActiveX控件皆作为图形的形式访问,要访问这些“图形”式的ActiveX控件的属性必须采用“图形对象.OLEFormat.Object.属性”的形式进行)

(二)用UBound(数组名)函数探测数组上界的方式智能获取每题的选项数目

(三)巧妙为每一个选择题的答案选择项的起止作定位。如下截图所示

(四)运用正确答案数组和单选结果答案数组比对判定得分率

好了,我们本期的内容就分享到这里,希望大家好好体味,之后我会退出对于该作品对应的头条视频,也请大家多多关注哦!

最后,还是非常感谢大家不离不弃地关注我,希望大家继续关注(头条号:跟我学Office高级办公)、推广和点评!也请大家持续关注我的下一期关于多选题的交互式作品的推出哦!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3559.html

标签: onpageshow
分享给朋友:

“运用VBA技术完美解决PPT交互式单选试题的设计” 的相关文章

「干货」通俗易懂的Deno 入门教程

作者: semlinker转发链接:https://mp.weixin.qq.com/s/2eqRTsf_z7Bcs6dziXe73Q一、Deno 简介Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码,有着卓越的开发体验。Deno 含有以下功能亮点:默...

gitlab 分支保护设置

一、功能描述代码管理中管理,我们把稳定的分支设置为保护,可以防止其他人员误操作(例如删除,合并,推送代码等)。二、Gitlab配置步骤1 点击项目Repository标签2.点击Expand标签3.配置如下:默认master是被保护的,而且只有维护人员具有推送和合并权限。设置保护分支,这里的beta...

壹啦罐罐 Android 手机里的 Xposed 都装了啥

这是少数派推出的系列专题,叫做「我的手机里都装了啥」。这个系列将邀请到不同的玩家,从他们各自的角度介绍手机中最爱的或是日常使用最频繁的 App。文章将以「每周一篇」的频率更新,内容范围会包括 iOS、Android 在内的各种平台和 App。本期继续歪楼,由少数派撰稿作者@壹啦罐罐介绍他正在使用的...

高效使用 Vim 编辑器的 10 个技巧

在 Reverb,我们使用 MacVim 来标准化开发环境,使配对更容易,并提高效率。当我开始使用 Reverb 时,我以前从未使用过 Vim。我花了几个星期才开始感到舒服,但如果没有这样的提示,可能需要几个月的时间。这里有十个技巧可以帮助你在学习使用 Vim 时提高效率。1. 通过提高按键重复率来...

HTML5学习笔记三:HTML5语法规则

1.标签要小写2.属性值可加可不加””或”3.可以省略某些标签 html body head tbody4.可以省略某些结束标签 tr td li例:显示效果:5.单标签不用加结束标签img input6.废除的标签font center big7.新添加的标签将在下一HTML5学习笔记中重点阐述。...

最快清除数组空值?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!大家好,我是大澈!本文约 600+ 字,整篇阅读约需 1 分钟。今天分享一段优质 JS 代码片段,用最简洁的代码清除了数组中的空值。老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!const arr...