图10-18显示了本窗体使用的工作表。 1. 准备如图10-18所示的工作表
2. 在工作表里添加按钮Display Form,并且给他指定宏DoStudents
3. 在VB编辑器屏幕,在当前工程里添加新模块,并设置模块的Name属性为InfoStudents 4. 在InfoStudents模块里输入下述过程DoStudents:
Sub DoStudents()
Students.Show End Sub
图10-18 Students and Exams应用程序的协助工作表
5. 返回到工作表,并点击按钮Display Form,测试DoStudents过程 6. 点击窗体右上角的关闭按钮,关闭窗体
38.给窗体Students and Exams自定义窗体编写VBA过程
自定义窗体Students and Exams包含很多VBA过程,显示在下面。这些过程的代码必须输入在窗体模块里面,双击窗体背景,激活窗体模块。 1. 从代码窗口左上角的复合框里选择“(通用)”。右边的过程选择复合框应该显示“(声
明)”,输入下述变量声明: 'Declarations Dim r As Integer Dim nr As Integer
Dim indexPlus As Integer Dim YesNo As Integer
2. 输入过程UserForm_Initialize代码,初始化窗体
Private Sub UserForm_Initialize()
'select first page of the MultiPage control 选择多页控件的第一页 'page numbering begins from zero (0) 页码编号从0开始 Me.MultiPage1.Value = 0
'choose the New option button 选择New选项按钮 optNew.Value = True
'hide three controls on startup 启动时先隐藏三个控件
lblNames.Visible = False ‘前面应该将标签Name Range命名为lblNames(原文
为lblLast)
refNames.Visible = False lboxStudents.Visible = False
'populate the Year combo box 填充Year复合框 With Me.cboxYear
.AddItem \.AddItem \.AddItem \.AddItem \End With
' populate the Major combo box 填充Major复合框 With Me.cboxMajor
.AddItem \.AddItem \.AddItem \.AddItem \
.AddItem \End With
' populate a combo box with grades 填充得分复合框 With Me.cboxGrade
.AddItem \.AddItem \.AddItem \.AddItem \.AddItem \End With
'display date in the lblDate label control 在lblDate标签里显示日期 Me.lblDate.Caption = Me.Calendar1.Value
'activate the first tab in the TabStrip control 激活TabStrip控件的第一页
Me.TabStrip1.Value = 0
'activate the SSN text box 激活SSN文字框 Me.txtSSN.SetFocus End Sub
3. 输入两个过程来控制选项按钮(optNew_Click和optActive_Click)
Private Sub optNew_Click()
lblNames.Visible = False refNames.Visible = False
lboxStudents.Visible = False Me.MultiPage1(1).Enabled = False
If lboxStudents.RowSource < > \
Me.txtSSN.Text = \Me.txtLast.Text = \Me.txtFirst.Text = \Me.cboxYear.Text = \Me.cboxMajor.Text = \Me.txtSSN.SetFocus End If
Me.txtSSN.SetFocus End Sub
Private Sub optActive_Click()
lblNames.Visible = True refNames.Visible = True refNames.SetFocus
If lboxStudents.RowSource < > \
lboxStudents.Visible = True Call lboxStudents_Change End If End Sub
4. 输入过程lboxStudents_Change和refNames_Change的代码,这些控制Students页上面的
RefEdit和列表框控件:
Private Sub lboxStudents_Change()
indexPlus = lboxStudents.ListIndex + 3
With ActiveWorkbook.Worksheets(\
Me.txtSSN.Text = Range(\Me.txtLast.Text = Range(\Me.txtFirst.Text = Range(\Me.cboxYear.Text = Range(\Me.cboxMajor.Text = Range(\Call TabStrip1_Change
Me.MultiPage1(1).Enabled = True End With End Sub
Private Sub refNames_Change()
lboxStudents.RowSource = refNames.Value lboxStudents.ListIndex = 0 lboxStudents.Visible = True
Call lboxStudents_Change End Sub
5. 输入代码来控制命令按钮OK(cmdOK_Click)和Cancel(cmdCancel_Click):
Private Sub cmdOK_Click()
If Me.optNew.Value = True Then
Me.Hide
ActiveWorkbook.Sheets(\r = ActiveSheet.UsedRange.Rows.Count nr = r + 1
Range(\Range(\Range(\Range(\Range(\Me.txtSSN.Text = \Me.txtLast.Text = \Me.txtFirst.Text = \Me.cboxYear.Text = \Me.cboxMajor.Text = \Me.txtSSN.SetFocus
'redisplay the form Me.Show Else
MsgBox \End If End Sub
Private Sub cmdCancel_Click()
Unload Me
Set Students = Nothing End Sub
6. 输入过程cboxGrade_Click来控制位于Exams页上的Grade复合框:
Private Sub cboxGrade_Click()
YesNo = MsgBox(\
vbYesNo, \
If YesNo = 6 Then
Me.lblGrade.Caption = cboxGrade.Value Select Case TabStrip1.Value
Case 0
Range(\Case 1
Range(\
Case 2
Range(\Case 3
Range(\End Select
cboxGrade.Value = \End If End Sub
7. 输入过程Calendar1_Click,如下所示:
Private Sub Calendar1_Click()
YesNo = MsgBox(\\If YesNo = 6 Then
Me.lblDate.Caption = Calendar1.Value Select Case TabStrip1.Value
Case 0
Range(\Case 1
Range(\Case 2
Range(\Case 3
Range(\
End Select End If End Sub
8. 输入过程TabStrip1_Change和MultiPage1_Change,如下所示:
Private Sub TabStrip1_Change()
indexPlus = lboxStudents.ListIndex + 3 With ActiveWorkbook.Worksheets(\
Select Case TabStrip1.Value
Case 0
' English
Me.lblGrade.Caption = Range(\Me.lblDate.Caption = Range(\Case 1
'French
Me.lblGrade.Caption = Range(\Me.lblDate.Caption = Range(\Case 2
'Math
Me.lblGrade.Caption = Range(\Me.lblDate.Caption = Range(\Case 3