一、认识“ActiveX”控件
1、开发工具,插入,表单控件和ActiveX控件,前者编辑余地小,后者需在设计模式下编辑;
2、ActiveX控件的属性决定了其大小、位置等诸多方面,右键查看其属性,很多,但首先重点掌握3个共用属性:caption、Enable、Visible
3、点击控件,在工作表界面的左上角可看到其(名称)属性,在vba界面,输入sheet1.后能弹出控件名称,如Sheet1.CommandButton1.Caption = "确认"可对属性赋值;
4、稍微了解、练习以下其他属性,如:Sheet1.CommandButton1.Top=Sheet1.CommandButton1.Top+Sheet1.CommandButton1.Height,观察效果;
5、了解了属性后,最关键是利用控件的事件,vba中进入控件所在的sheet,可选择到该控件,下拉可看到其支持的事件集;掌握主要的事件即可,如click。
了解一下MouseMove(鼠标悬停)事件,设计一个小游戏,始终无法点击到按钮。
二、了解几个常用控件及属性
1、Label标签:用于给用户看信息,而不给用户修改;重点掌握3大属性;
2、选项按钮optionbutton:(a)用caption设置选项名(供选内容)(b)基于对group name属性的定义设置分组,组内单选;(c)选定的按钮value属性为true,否则为false
3、微调按钮SpinButton:(a)无caption属性(b)max、min属性提供最大、最小调节范围(c)value属性是返回值(d)linkedcell属性一般不用,而是通过写宏
“range(“a1”)”=sheet1.spinbutton1.value的方式建立连接,再在该控件的change事件中“call 宏”;
三、考试系统设计练习
逐块分析:(1)看一下成品演示,整个系统界面最核心的是由微调按钮控制,每次按按钮时,页面的展示内容发生变化(label标签及选项按钮链接的内容),(换题)实质是
以变量方式对各label的caption赋值。(a)填入代码(b)设置spinbutton属性:max=8(也可根据设置为随题量变化的变量),min=1(c)在微调按钮的change事件中“call ceshi”
(2)页面展示内容变化时,选项按钮的选定状态也应全部清空,即换题时应无默认选定项。因此添加代码。
(3)当题目答案选项小于4时,应将多余选项按钮隐藏。(代码逻辑:值为空的label对应的optionbutton的visible属性设为false;不空时为true)
Sub ceshi() i = Sheet2.SpinButton1.Value '获取按钮控制变量 '根据微调按钮返回值显示不同界面内容 With Sheet2 .Label2.Caption = i .Label3.Caption = Sheet3.Range("a" & i + 1) .Label4.Caption = Sheet3.Range("b" & i + 1) .Label5.Caption = Sheet3.Range("c" & i + 1) .Label6.Caption = Sheet3.Range("d" & i + 1) .Label7.Caption = Sheet3.Range("e" & i + 1) End With 步骤(1) |
Sub ceshi() i = Sheet2.SpinButton1.Value |
'查看是否有CD两个选项,注意此时还在with里 If .Label6.Caption = "" Then .OptionButton3.Visible = False Else .OptionButton3.Visible = True End If If .Label7.Caption = "" Then .OptionButton4.Visible = False Else .OptionButton4.Visible = True End If 步骤(3) |
(4)应将选定答案传入原数据库,问题是什么时候传入?用什么事件激活?第一反应是用spinbutton激活,但容易出现的问题是,最后一题时,往往不会再点spinbutton,而是
点“结束考试”,因此不行。应用选项按钮激活,在表中optionbutton的click事件填入代码。代码逻辑:只要点击某按钮,用微调按钮值+1确认题的序号,将对应选项传回数据库。
(5)切入新题时,应先判断是否已有选定答案(例如回滚页面时),若有,应在页面显示,在主模块with语句内添加代码。
(6)界面往往有“第1题”及“最后一题”的按钮,该按钮同样连接这么多的信息,因此需同样多的代码。太麻烦,考虑代码重用。观察上述代码,全由变量i控制,因此可将sub改为
带参数的sub过程,与此同时,(a)在考试界面sheet中的SpinButton1_Change事件内“call ceshi(sheet2.SpinButton1.Value)”,(b)"第一题“的CommondButton1_Click事件内“call ceshi(1)”,同时记着设置Sheet2.SpinButton1.Value=1;(c)最后一题“的CommondButton2_Click事件内“call ceshi(8)”,同时设置Sheet2.SpinButton1.Value=8"
Private Sub OptionButton1_Click() Sheet3.Range("g" & Sheet2.SpinButton1.Value + 1) = "A" End Sub Private Sub OptionButton2_Click() Sheet3.Range("g" & Sheet2.SpinButton1.Value + 1) = "B" End Sub Private Sub OptionButton3_Click() Sheet3.Range("g" & Sheet2.SpinButton1.Value + 1) = "C" End Sub Private Sub OptionButton4_Click() Sheet3.Range("g" & Sheet2.SpinButton1.Value + 1) = "D" End Sub 步骤 4 根据选项按钮将选定项传入数据库 |
'返回之前的答案 If Sheet3.Range("g" & i + 1) = "A" Then .OptionButton1.Value = True ElseIf Sheet3.Range("g" & i + 1) = "B" Then .OptionButton2.Value = True ElseIf Sheet3.Range("g" & i + 1) = "C" Then .OptionButton3.Value = True ElseIf Sheet3.Range("g" & i + 1) = "D" Then .OptionButton4.Value = True End If 步骤 5 |
Sub ceshi() Dim i as Integer i = Sheet2.SpinButton1.Value 替换为: Sub ceshi(i as Integer)
|
(7)进一步完善系统:A.点击“结束考试”按钮后,将考生答案与正确答案对比,弹出MSGBOX “共答对多少道题”。B. 点击“结束考试”后禁止再修改考试答案,禁止再次点击“结束考试”按钮。但是允许考生点击微调按钮查看考题和自己之前的答案。
四、窗体及其他控件
1、窗体UserForm:除三个通用属性外,还注意“ShowModal显示模式”属性;常用方法:show、 hide;常用事件: UserForm_Activate激活、UserForm_QueryClose退出
2、文本框TextBox:常用属性:Enabled可用性、Visible可见性、Value返回值、PasswordChar密码字符(如让输入登录密码时显示*)、TabIndex按下Tab键时的切换顺序。
3、复选框CheckBox。常用属性:Enabled、Visible、Value返回值。
4、复合框comboBox(下拉框)。属性:Enable/Visible/Value、List数据源列表。 常用方法:AddItem增加一个下拉项目、RemoveItem移除一个、Clear。
5、列表框ListBox(实际是复选框的下半截)。属性:Enable/Visible/Value、ColumnCount列、List数据源列表。常用方法:AddItem增加、RemoveItem移除、Clear
五、演示:
1、登陆系统界面:根据不同的用户显示不同的sheet
2、演示如何在复合框中构建下拉列表、返回不同的选择值等;
3、会员信息查询系统:根据手机号码的部分即可联想完整手机号码,并提取会员信息。