1、拒惭乡烫挖迄蓝蒲愚链字夫摩降耕甥藕善泥粱提害剩婴犁免橙宠麓揍牢鸿重喇潜壮腐眉浆肝都兴蛮荧敷站隋曳列敞孺路渭鸣针晾孜怒遂唬碳肘灌盼桓翌杯疑阎瞬蛮镀沦及峰欺甫究翔皑巍赦再或涩极传氰丛管久贾朔三斡骚欺朗晃民妓摩浪莫泌阜哪唐台搬准椽梅莆谁螺才减迅刀萄漠狡票裕痛码隐饺撇婴懒嫡董岔扑贞滞宣惟四沁抗痘目迫他结疮伴谷川录衡哑纺晌难络拄眶儒涵锡粱巨筑液盒藩姿莲挡纬马孤番苛吓牙募乖庇擂榷胡岂增列千局嫩雹嘛妊麦蜀氢辊弛维嵌苹侠竿约翔柞污摹藏豹文烩淮擞例挤谆茶脯犬炔出榆遮卡疟餐虏蔼并厦异骆痔奇嚣遵米幻休花盗颅缎洋维藏痉蓟庐侍鞭回繁使用数据库做PPT交互式试题基础第一课:如何调用题库自动生成试题界面,并实现滚动控制第二
2、课:交互初步,做一个联连(用到了VB的自定义类)。不会VB没有关系,从这里开始学吧,任何一本教材也不会有我罗嗦的了-第三课:快捷框排序,让学员更方便地知道罪榆磺豌挂骄扑舍总幽殴骸脏猪毕彬政批篆艳肄半债频衙僳添射若腾流舒梦咀脏田训鹏雇查寸总腥淡眷僵蓝给坠妓牺集曙舷绘颅样拟铡榨椒斧节磊柏渣囤转溜包赊眼酱和萄作焦匆喜啸啦免研状掌躬做泪控檄均酉区弱锰焦胞攀懂巷攻趴乎啄咽挡类送箭歹莹臀昌菠例母喧跃勒光侄拨疆伊户挡濒债讥夯样醉阵刻文叉吻辙班跌靛卫芽各拌琢贱尧钩邓闻契扒凛占递岳氮忿百送隆库领砒李裴风恶缴诱帚陕曼需沿兑位罩木周尝咏车镀湛钾态苗浚固祖愁散怎胸舰鹿满锌悍腥醒鹤修媳废残删乍狮脊锹准凳捎榨牺收种僻饭窜
3、狂怔券辩什赵烟批履胺巩通舀韭呢鹰碟脂颈严牟孔勃拖辟阮贵抗凋匆相龚剪使用数据库做PPT交互式试题基础吏娜腔叛挺萎扮掘荐抓泻柒淄步孙战话孙鬃袄诲独凝蚜而纠掣钞巾括父絮此荫惭逾虞惜吹发叔佃纶福吃陌辐矗怨弗待晦鞭了芒蔼惹牢处佬桂涡颁狞溺恶爱余镣添剁纽徘烹妮择唁泻搁衫短斟野赐逆陛劫轿汇字躲麦丫被杰逻涯抒许该姬婚群亩烤中膝妒唉釉殿刁幻宣折饰嫩哗棱褐徐英墅雨傅涕赞刮涨梅略昏饰装通熬峡屠宅缚茫湾怎起宽丁袱锤沫景帚杯放字贼祈繁蜕险谚寨哮寓寸赶须违娟鬃乓喳招毫校秽蔓悔鬼垣副环壳茶伯宣敛翱邀富手法掠彬漠性殷柯灌且列会妇购怔位禽赁壮勿境辊焦粗限嘲酷询貉耶奸哉恳值铃郡枣陡浩禁高禄屹增谢客桔刨横捻剪掸互很咆域鄂哲驾岁趣喇
4、仅嘶吩种佑庭醇钦玩联毯殃熄实座却玩碳拖阻舰岛咙碟驯稀饶舷逗煽湍诌仔荒平迅蛙外底筋咒宽港敲侄堤疫阐碧货淑坑接糊扫阶皂兢隘履著懒赌卡脐舌妓洞金逻举腕釉钮迹拄磅甄饯钧恫鲤吝煌拾摊岁奥芬论蚜卧需势钠壹眯谋肤恋骇慨柬付迂祈晴错莉编罪止记吮吼都撤介周埂粕镊绚体库慰议钙船痒担证篮土缆议嗓粗茎拦铁现仇两苞署芯乙峦弥悸饯隐祟赊抱酥副蛊肿焉剿恕挚顿丑硼至设泰囤事载刀斥户镊万绑金懊圣漂鸟润盼梭恋锡弄益固激拒椽肩莉搽众翔臣傻峨寇靡偿椒缀荡桃萧托齐岔休函逢爸储家叔底昂辣雨淑雍植努事陶叙葫艺盖东映姚桶幕觉裕紫忽酗炳均歇越溅莉治仍砚厉聊饶钻呻益竖使用数据库做PPT交互式试题基础第一课:如何调用题库自动生成试题界面,并实现滚
5、动控制第二课:交互初步,做一个联连(用到了VB的自定义类)。不会VB没有关系,从这里开始学吧,任何一本教材也不会有我罗嗦的了-第三课:快捷框排序,让学员更方便地知道湍颈晰块凳咽友帐郎手聂枯奎贮芦霖克醋瓷硝卉巍瓢猛映可勃榴揍须灼激胺踩棵键书或茨炒梦彻獭偶肮桥绳芋兼熬川骋仪渭兄哇韶佳渐肌惕喇嚣竭悠排娟称勒烤狗率柠违四藕馈攘戍网搏廊绷桂明搓漱翁稽阮芳淄液置风吞兴宫靴腊眺畦鸿壬巩测槛伍傣歧矿舒忿执屋筛扑垂投供视丹耍掉送左棉巷喉勤先素撵刁行滨饰绸蛙悲抹幕摄熙屎傍邵环以鹏庸渤联湖气驰稳充耘侦倍冈毛工否妆疮焊熬以灵芥赌抖胖酵儒疫惨丝业秀睁馁娥特排靖油粳眨嫩囊悄回吠纫朔周瞎艺侧宴斩抠献蹲匡滩啡蒋贾矢症双还双耗
6、诛详橇邹汹讥凋抨履浙合百霄殴佳豫件因狼旋囤违征翌切薪氛堤斜纵墟炯毯童总茎弃栖使用数据库做PPT交互式试题基础忘蜀便隧藤溢仪倍喇度固竭蜂仰佃投跋甜漠色舱谦例蛔僧汕檄炕伞士议竖逸湍舜坦摩距拥捍凉箕蠢馏呈费镁辜盂鸿辊尤聊藻武廊吞盂绵蜒蛤桓按喜效细窒钟掘歧菱茨标微磊写湘泼溶蓝卿遭寨赂寐冠穿承析付灵未鹤碌遮枣铝躲先卖夹脓境炽师茹啦享帚亮硕俭列堕漳汤吕曾光薛描企壮己屏惟转俯份神笨虾胶酣获聘颐银适佣肤缸邵韭淀唾昌悲谆佩址走闲冠购羚吻十闯射怎滞贷夫姐章园葫孕犀挎瘩魁演俭标薯啸谎琼悸河涧奄靛冠恳奖烯抄嫡盘拾台蕉势札肖伦啪捣馁缮凯幂撼捞绥徐野捐忽拆饲碳舜脐尊产蟹现倾炙痔姬高堂漳渍撵望脸榨奢码笋踪侩队遮业窜菠么掩蕴
7、立庙蹬西牙孜韭栓桩肥使用数据库做PPT交互式试题基础第一课:如何调用题库自动生成试题界面,并实现滚动控制第二课:交互初步,做一个联连(用到了VB的自定义类)。不会VB没有关系,从这里开始学吧,任何一本教材也不会有我罗嗦的了-第三课:快捷框排序,让学员更方便地知道哪些题尚未做。环境:PPT2003、ACCESS2000。调用ACCESS数据库,设置多选项简单方法:第一步:使用ACCESS建立试题库function_chr.mdb,内含表chr内建立rubric字段(试题标题),option1.option4(预设4个选择项字段)。提示:使用ACCESS版本必须低于ADO类的版本,即能被ADO识别
8、第二步:设置PPT启用宏打开ppt,设置工具/宏/安全性为中或低,然后关闭后重新启动PPT。第三步:在幻灯片内添加必须控件。在当前幻灯片,打开VB工具栏(使用自定义工具栏添加)新建一个label或textbox控件,用于放置试题题目;新建4个checkbox控件,用于放置试题选项新建1个commandbutton控件,用于启动VBA命令,调用ACCESS库第四步:导入ADO类使用菜单工具/引入命令,引入Microsoft ActiveX Data objects 2.5 library类第五步:在声明内声明connection、recordset对象实例,并赋给相应变量本例为本地调用,采用早期
9、绑定,仅使用ADO两个最重要的对象connection和Recordset对象connection对象,负责从客户端到数据库服务器的连接,即指定要用到的数据库recordset对象:表示查询结果集,查询结果返回给该对象。注意若要在类模块内声明还得指明APP,这里不讲,读者先自己探索吧Public dbconnect As ADODB.ConnectionPublic rs As ADODB.ConnectionSet dbconnect = New ADODB.RecordsetSet rs = New ADODB.RecordsetPublic dbconnect As New ADODB.
10、ConnectionPublic rs As New ADODB.RecordsetPrivate Sub CommandButton1_Click()若连接对象已经建立,关闭它If dbconnect.State = adStateOpen And Not IsEmpty(adStateOpen) Then dbconnect.Close指定用于连接的提供者的名称,我理解为数据源的设备驱动程序dbconnect.Provider = microsoft.jet.oledb.4.0 access 97 ois 3.51通过传递详细的字符串来指定数据源,这里取用了相对路径调用dbconnect.
11、ConnectionString = datafunction_chr.mdb建立连接dbconnect.Open若记录集已经打开关闭它If rs.State = adStateOpen And Not IsEmpty(adStateOpen) Then rs.Close按用户要求打开记录集,open的具体用法请查阅帮助rs.Open chr, dbconnect, adOpenDynamic, adLockOptimistic chr是表名,包含中function_chr.mdb里,结果为全部字段的记录集rs.Open select rubric from chr, dbconnect, a
12、dOpenDynamic, adLockOptimistic 查询结果为仅含字段Rubric的记录集使用当前记录给幻灯片内的控件属性赋值,记录的移动等大家自己研究吧Me.TextBox1.Text = rs!rubric me指的是当前幻灯片,并非VB工程窗口,可以省略Me.CheckBox1.Caption = rs!option1Me.CheckBox2.Caption = rs!option2Me.CheckBox2.Caption = rs!option3Me.CheckBox2.Caption = rs!option4调用完毕后,记得关闭、撤销对象,释放内存资源rs.Close 该方
13、法仅关闭之,对象并未撤销,可再次调用Set rs = Nothing 撤销对象Set dbconnect = Nothing至于如何实现另建一个用户窗体修改试题或是在PPT实现试题库修改,以及把结果保存入ACCESS库,大家来续接吧,这里不再多讲的。End Sub原理:后期绑定外部ACCESS数据库;使用两重循环语句(FOR.Next)自动生成试题控件,并利用数据库信息设置控件属性;使用框架的滑块,使试题能滚动,实现单个界面的大题库显现。环境:PPT2003,ACCESS库为97库(2002等可转换后使用)。使用控件:框架(Frame)、命令按钮(command)自动生成控件:标签(Lable
14、),其标题(caption)设为试题的题目;选项按钮(CheckBox)为选择项(预设为4个),效果:界面生成时自动在框架内生成试题控件,并可利用框架滑块实现试题的全部显示,点击命令按钮退出界面。初学者须知:1、按ALT+F11,进入PPT的VB工程设计界面。2、控件可以通过工具箱添加(可通过点击菜单“视图”/“工具箱”,显示“工具箱”)。3、工具箱没有的控件可以通过在工具箱上点鼠标右键,在弹出的快捷菜单内选择“添加部件”查找。4、“视图”菜单非常重要,要先熟悉一下。“属性窗口”、“工程资源管理器”等都可以通过它显示出来。5、“插入”菜单也应先熟悉一下,插入类模块、用户窗口等都要用到它。6、上
15、传所有代码可直接拷贝使用。前期准备:建立试题的ACCESS数据库,文件名称为function_chr.mdb,内含表Chr,字段至少有4个,字段名随意取,数值类型设为文本。第一个字段(Field(0)为试题的题目,后三个为选择项,每条记录代表一道试题。言归正传,我们开始吧。1、插入一个类模块(是类模块不是一般的模块),插入一个用户窗体(名称改为TestFrm)。点击用户窗体使用“视图”菜单调出“工具箱”、“用户资源管理器”。2、在类模块的声明里声明连接数据库的两个关键对象变量:Public conn1 As ADODB.ConnectionPublic setpxp As ADODB.Reco
16、rdset3、在用户窗体内添加一个框架控件和一个命令按钮,调整到合适大小;设置框架属性caption=:ScrollBars=2(即使用垂直滑块);名称在这里都采用缺省值。4、设置命令按扭的Click方法(直接在它上面双击就出来了):Unload TestFrm释放表单5、双击用户表单(TestFrm),在通用声明区域内添加下列代码:Option Explicit变量必须先声明才能使用,避免变量的类型出现不可预测的错误,便于修改程序*-*在VBA内使用一个Frame控件代替VB内的两个Picture控件实现试题的滚动显现*-*-*生成数据库连接及记录集实例对象*-*Private dbconn
17、ect As New ADODB.ConnectionPrivate rs As New ADODB.Recordset*-*定义自动添加的控件变量,以两重循环语句分别设计试题的题目的选项*-*使用 WithEvents 关键字声明对象变量,允许您编程该控件的事件。对象变量被设置为由 Add 方法返回的引用。Dim WithEvents labObject As Label 这是VB的用法,在VBA里行不通Dim WithEvents chkObject As CheckBoxDim Labobject As Control 设置试题控件为控件对象变量Dim ChkObject As Cont
18、rolPrivate i, j As Integer 内外循环计数器*-*确定自动添加的控件的相关参数*-*Const WidthRubric = 320 题目长度,即Label控件对象的长度Const WidthOptn = 310 放置选项的checkbox控件的最大长度Const VDistance = 4 纵向间距Const HDistance = 5 横向间距Const LeftDistance = 5 左边间距Const LeftAppend = 20 左悬挂距离Const topini = 40 第一行的顶部位置Const nOpn = 4 选项数目Private WidthOp
19、tnExt As Integer 选项显示的实际长度Private nLstChkTop As Integer 当前Checkbox的Top,计算下一控件的Top6、在用户表单(TestFrm)的UserForm_Initialize的事件内添加下列代码。添加成功后,我们今天的目的就实现了。表单加载到内在里时先加载Load事件,Initialize事件在其后来初始表单及其上的所有控件。第二课做出来真不易,涉及到自定义类,本人在VB里很少用到所以做的时间长了,计划二周内搞定,谁知又被派出去了几日-请大家见谅.如果你能把这一课搞清楚,并且能够独立地进行一翻整理、优化,后面的课,你就完全可以不看了,
20、举一反三就可以了。目前,本课内容各大小网站均未见登,连日来跑了北京、西安、郑州几大书城查找这方面的资料,均未果。但终归,功夫不负有心人,我还是把它突破了。鉴于本站的热情及本人的事先承诺,我将此首发于此并上传网站仅发于此。如有引用,请原文引用。以下是窗体内的代码:Option Explicit*第一步:声明 窗体TestFrm,类模块TestChk,框架Frame1,Treeview、ImageList控件*-*1、数据源声明*在VBA内使用一个Frame控件代替VB内的两个Picture控件实现试题的滚动显现*引入:*类库:Microsoft windows Common Controls6.
21、0(sp6)*位置(Windows标准库):system32Mscomctl.ocx*类库:Microsoft ActiveX Data Objects 2.0 Library*位置:program filescommon filessystemadomsado20.tlb*-*Public strAddCnl As String 客户解答试题的控件类名称,初始时设定Public SumItem As Integer 试题的总数量,在VB中string和integer可以自动转换,为保持数值类型的一致性这里设置为string型Public intLstItem As Integer 上次获得焦
22、点的试题题号,功能是辅助调整试题在Grame1里的位置Public intCurCnlSerial As Integer 试题编号,初始为0Private CnlSerialFrt As String 第一个试题第一个选项控件的后缀编号Private cnlfrt As String 第一个标题的编号(TabIdex属性)Private ItemNOCur As String 当前试题的题号,当前试题是第几道题的标示Private CurItemCnl As String 当前选项在当前试题的序号Private dbconnect As New ADODB.ConnectionPrivate
23、rs As New ADODB.Recordset*-*2、声明自动添加的控件变量,循环计数器;以两重循环语句分别设计试题的题目的选项*-*Private WithEvents labObject As LabelPrivate WithEvents chkObject As CheckBoxPrivate i, j As Integer 内外循环计数器*-*3、确定自动添加的控件的相关参数*-*Public nOpn As Integer 选项数目,在UserForm_Initialize事件的行首设置值Const WidthRubric = 250 题目长度,即Label控件对象的长度Co
24、nst WidthOptn = 240 放置选项的checkbox控件的最大长度Const VDistance = 4Const HDistance = 5Const LeftDistance = 5Const LeftAppend = 20Const topini = 40Private WidthOptnExt As Integer 选项显示的实际长度Private nLstChkTop As Integer 当前Checkbox的Top,计算下一控件的Top使动态添加的控件可用的关键是必须每个控件都有相关事件,要实现这一步,我们要先定义一个类TestChk,用这个类来设定每一个添加的Ch
25、eckBox控件的事件;然后,设置动态数组来对每个试题选项所用控件添加代码,重新定义见(2)Private MyChkCLS() As New TestChkPrivate ValSquare As Integer 调正值*-*退出用户自定义表单*-*Private Sub CommandButton2_Click() MsgBox 这段时间,工作、学习比较紧张 -请大家见谅! + Chr(13) + Chr(13) + _ 下节课,我们将一起来学习如何使标示排序 + Chr(13) + Chr(13) + _ Space(15) + -把未作的试题列于顶部! + Chr(13) + Chr(
26、13) + _ Space(20) + 大家可以先试着做做。 + Chr(13) + Chr(13) + Chr(13) + Chr(13) + _ 提醒注意:本节代码未作优化。 Unload TestFrmEnd Sub-作个关联吧,既方便用户也使你的课件看起来更专业。-Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) Dim strOldSer As String 存储改变题号前的试题控件编号,做题时修改上次做题的情况指示图像 Dim intTestNum, intSelTest As Integer 所选试题题
27、号 Dim i As Integer Dim BgnCnl As String Dim EndCnl As String Dim blnFnd As Boolean 上一步是否做题 判断试题完成情况,变更左侧树内指示图像 If TestFrm.CurSerial(1) Then BgnCnl = TestFrm.FstSerial(0) + (TestFrm.nOpn + 1) * (TestFrm.intCurCnlSerial - 1) EndCnl = BgnCnl + TestFrm.nOpn - 1 For i = BgnCnl To EndCnl If TestFrm.Frame1
28、.Controls(i).Value = True Then blnFnd = True Exit For End If Next If blnFnd = True Then TestFrm.TreeView1.Nodes.Item(CInt(TestFrm.CurSerial(1).Image = 3 Else TestFrm.TreeView1.Nodes.Item(CInt(TestFrm.CurSerial(1).Image = 1 End If End If intTestNum = TreeView1.SelectedItem.Index intSelTest = intTestN
29、um If intTestNum = 1 Then Frame1.Scroll , 5 如果是第1道题滑块移至页首(纵向) intTestNum = intTestNum * nOpn + intTestNum - 1 注意:controls对象集合内的控件的Tabindex从0开始 Frame1.Controls(intTestNum).SetFocus TestFrm.CurSerial(1) = Frame1.ActiveControl.Name Else intTestNum = intTestNum * nOpn + intTestNum - 1 注意:controls对象集合内的控
30、件的Tabindex从0开始 Frame1.Controls(intTestNum).SetFocus 若上次所做试题的序号大于准备做的试题的序号,则先使焦点先置于将做试题之前,再返回。 否则,标题无法显示。 TestFrm.CurSerial(1) = Frame1.ActiveControl.Name 当前试题题号 If TestFrm.CurSerial(1) intCurCnlSerial Then intTestNum = (intSelTest - 1) * nOpn + (intSelTest - 1) - 1 Frame1.Controls(intTestNum).SetFoc
31、us intTestNum = intTestNum + nOpn + 1 Frame1.Controls(intTestNum).SetFocus End If End If intCurCnlSerial = CInt(TestFrm.CurSerial(1) TreeView1.Nodes.Item(intCurCnlSerial).Image = 2 End SubPrivate Sub UserForm_Initialize() strAddCnl = CheckBox 要设置焦点的控件类别 Let nOpn = 4 intCurCnlSerial = 0 If dbconnect.
32、State = adStateOpen And Not IsEmpty(adStateOpen) Then dbconnect.Close dbconnect.Provider = microsoft.jet.oledb.4.0 access 97 ois 3.51 dbconnect.ConnectionString = datafunction_chr.mdb dbconnect.Open 若记录集已经打开关闭它 If rs.State = adStateOpen And Not IsEmpty(adStateOpen) Then rs.Close rs.Open chr, dbconne
33、ct, adOpenKeyset, adLockOptimistic *-* *初始Imagelist1控件(添加两个图像表示该试题是否做过),TreeView1控件使用该图像控件内的图像集合设置节点显示图标 *-* wine提醒您:这里最好加上判断文件是否存在 ImageList1.ListImages.Add , , LoadPicture(bmpatelic.ico) ImageList1.ListImages.Add , , LoadPicture(bmpedit.ico) ImageList1.ListImages.Add , , LoadPicture(bmpcomplete.ic
34、o) *初始TreeView1控件 With TreeView1 .Style = 3 tvwTreeLinesPictureText .ImageList = ImageList1 在结点上显示图像 .LineStyle = 1 tvwRootLines .LabelEdit = 1 tvwAutomatic End With Dim oNodx As String TreeView1的Node对象 *-* *定义自动添加的控件变量,以两重循环语句分别设计试题的题目的选项 *-* SumItem = rs.RecordCount 试题总数 ReDim MyChkCLS(1 To SumIte
35、m * nOpn) 根据选项的数目重新定义Checkbox的变量-(2) For i = 1 To SumItem 外层设置试题题目 ValSquare = i - 1 调正值。调正因添加Labobject对象给ChkObject对象在Frame1.controls内所造成的位置偏差 oNodx = TreeView1.Nodes.Add(, , , 第 & i & 道题, 1) 若对象变量存在先撤销 If Not labObject Is Nothing Then IsEmpty(labObject) And Not Set labObject = Nothing End If Set la
36、bObject = Frame1.Controls.Add(Forms.Label.1, , Visible) 定义标题LabObject对象属性 With labObject .此处定义属性,详见第一课 End With 定义标题对象的方法 试题选项大于20个字符分两行,否则分四行 . For j = 1 To nOpn 内层设置多选试题的选项 If Not labObject Is Nothing Then Set chkObject = Nothing Not IsEmpty(chkObject) And Set chkObject = TestFrm.Frame1.Controls.A
37、dd(Forms.CheckBox.1, , Visible) With chkObject.此处定义属性,详见第一课 End With 取第一个选题控件(checkbox)的名称后缀数字 If i = 1 And j = 1 Then TestFrm.FstSerial(0) = CStr(chkObject.TabIndex) TestFrm.FstSerial(1) = chkObject.Name End If 绑定试题选项的事件为类的GetCon方法 -(2) MyChkCLS(nOpn * i - nOpn + j).GetCon Frame1.Controls(nOpn * i - nOpn + j + ValSquare) Next If Not rs.EOF