'Physics
Me.lblGrade.Caption = Range(\Me.lblDate.Caption = Range(\
End Select End With End Sub
Private Sub MultiPage1_Change()
Me.lblWho.Caption = Me.txtLast.Value & \& Me.txtFirst.Value Call TabStrip1_Change End Sub
39.使用自定义窗体Students and Exams
既然你已经准备好多有必须的VBA过程了,我们来看看该窗体是如何对用户操作反应的。 1. 切换到Excel窗口,并激活Sheet1 2. 点击按钮Display Form
点击Display Form按钮运行过程DoStudents,该过程显示自定义窗体Students and Exams。 在窗体出现在屏幕上之前,VB执行过程UserForm_Initialize里面的每条语句。结果显示为图10-19。
图10-19 工作表里的按钮Display Form让你快速访问自定义窗体Students and Exams来查看或者输入数据。当窗体上载时,只有符合选定的选项按钮的控件才会显示。
窗体显示后,你就可以输入新学生并点击OK将学生的数据转移到工作表。当你点击OK按钮时,就会执行cmdOK_Click过程。注意,你不能输入新学生参加的考试,因为多页控件的第二页
(Exams)这时不可用。一旦新学生的数据被写入工作表,该窗体就会重新显示,你可以继续输入数据,或者你可以点击Cancel,将窗体从屏幕上清除。当你点击Cancel按钮时,就会执行过程cmdCancel_Click。
3. 使用自定义窗体Students and Exams输入两位新学生的数据。任何时候,你都可以点击
Active选项按钮,从已有学生中上传数据。当你点击Active选项按钮时,标签Name Range和RefEdit控件就变为可见的了。
4. 点击Active选项按钮,然后点击RefEdit控件的减号按钮 5. 选择工作表里的姓名区域,如图10-20所示。
图10-20 使用RefEdit控件,你可以选择包含你想要使用数据的单元格区域
使用RefEdit控件,你可以选择工作表里的单元格区域,在本练习里,选择了包含学生姓和名的单元格。选择有效数据很重要,开始点击Last Name列标下面的单元格(B3)并且向下向右拖曳鼠标以至包括学生的名 注意,当你使用RefEdit控件时,窗体临时被隐藏。你所选择的单元格出现在RefEdit控件上。点击RefEdit控件的减号按钮返回窗体。当你返回窗体时,过程refNames_Change正在运行,该过程使用单元格区域地址,将学生姓名填充到列表框控件里。该过程的最后一条语句调用lboxStudents_Change过程,确保窗体的文字框和复合框与列表框里所选学生姓名同步。列表框显示已有学生的姓名,被选学生的数据显示在左边的文字框和复合框里面(参见图10-21)
图10-21 窗体上的列表框是通过RefEdit控件将储存在工作表里的数据填充的
6. 点击列表框里的任意姓名,并查看该学生的数据 7. 点击列表框里的任意姓名,然后点击Exams页。
Exams也显示了被选学生(参见图10-22)的姓名。TabStrip控件显示考试科目,如果被选学生参加过任何考试,当你点击适当科目页时,考试的日期和分数就会显示出来。
图10-22 Exams页显示被选学生和科目的考试日期和分数
你可以通过提供的复合框和日历控件,输入或者更改学生的分数和考试日期。VB将问你是否修改数据(回顾Calendar1_Click和cboxGrade_Click过程的VBA代码)在你以确定回应对话框后,所选的数据或者分数就会写入到工作表中相应的列(参见图10-23) TabStrip1_Change过程确保你点击科目页的时候,VB会从适当的工作表单元格显示考试的分数和考试日期。MultiPage1_Change过程则确保当你点击Exams页时,lblWho标签显示当前列表框里选项学生的姓和名。
图10-23 工作表F到M列里的数据是通过用户窗体Students and Exams上Exams页输入的
40.接下来……
既然你到了这个相对比较长的章节的结尾,那么你已经有了必要的技巧来设计有用的窗体。我们来简单总结一下你在本章学习的内容。内置对话框可以从你自己的VBA过程里显示,对于需要用户输入的自定义VBA应用程序,就需要创建一个自定义窗体。通过设置tab键顺序,确保用户可以窗体上按逻辑顺序移动。在窗体模块里面编写VBA过程,让窗体对用户操作作出反应。通过使用属性窗口或者编写UserForm_Initialize过程,给控件设置初始值。确保有过程将数据转移到工作表。在下章里,当你开发集合和自定义对象主题的时候,将获得更多于自定义窗体实用的经验。