一、认识“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
With Sheet2
'选项初始化为不选
.OptionButton1.Value = False
.OptionButton2.Value = False
.OptionButton3.Value = False
.OptionButton4.Value = False
步骤(2)
 '查看是否有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,而是
  点“结束考试”,因此不行。应用选项按钮激活,在表中optionbuttonclick事件填入代码。代码逻辑:只要点击某按钮,用微调按钮值+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)
步骤 6

 

(7)进一步完善系统:A.点击“结束考试”按钮后,将考生答案与正确答案对比,弹出MSGBOX  “共答对多少道题”。B. 点击“结束考试”后禁止再修改考试答案,禁止再次点击“结束考试”按钮。但是允许考生点击微调按钮查看考题和自己之前的答案。

 

四、窗体及其他控件
1、窗体UserForm:除三个通用属性外,还注意“ShowModal显示模式”属性;常用方法:show、 hide;常用事件: UserForm_Activate激活、UserForm_QueryClose退出
2、文本框TextBox:常用属性:Enabled可用性、Visible可见性、Value返回值、PasswordChar密码字符(如让输入登录密码时显示*)、TabIndex按下Tab键时的切换顺序。
3、复选框CheckBox。常用属性:EnabledVisibleValue返回值。
4、复合框comboBox(下拉框)。属性Enable/Visible/ValueList数据源列表。  常用方法AddItem增加一个下拉项目、RemoveItem移除一个、Clear
5、列表框ListBox(实际是复选框的下半截)。属性Enable/Visible/ValueColumnCount列、List数据源列表。常用方法AddItem增加、RemoveItem移除、Clear

五、演示:
1、登陆系统界面:根据不同的用户显示不同的sheet
2、演示如何在复合框中构建下拉列表、返回不同的选择值等;
3、会员信息查询系统:根据手机号码的部分即可联想完整手机号码,并提取会员信息。