excel_vba_编程教程(完整版)-第69章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
设置TabStrip控件的最好方法是先添加它本身,然后放置其它的控件在里面。然而,如果已经有了
控件在那里,那么你可以在它们上面画TabStrip控件,然后使用“移至底层”命令,将TabStrip
控件放到Z…顺序的底层。
图10…17 外面的框架包含一个多页控件,而里面的框架则包含TabStrip控件
Students and Exams自定义窗体允许你输入新数据,或者显示数据,就像在工作表里一样。图10…18
显示了本窗体使用的工作表。
1。 准备如图10…18所示的工作表
2。 在工作表里添加按钮Display Form,并且给他指定宏DoStudents
3。 在VB编辑器屏幕,在当前工程里添加新模块,并设置模块的Name属性为InfoStudents
4。 在InfoStudents模块里输入下述过程DoStudents:
Sub DoStudents()
Students。Show
End Sub
207
… 页面 224…
图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 bo box 填充Year复合框
With Me。cboxYear
。AddItem 〃1〃
。AddItem 〃2〃
。AddItem 〃3〃
。AddItem 〃4〃
End With
' populate the Major bo box 填充Major复合框
With Me。cboxMajor
。AddItem 〃English〃
。AddItem 〃Chemistry〃
。AddItem 〃Mathematics〃
。AddItem 〃Linguistics〃
。AddItem 〃puter Science〃
End With
' populate a bo box with grades 填充得分复合框
With Me。cboxGrade
208
… 页面 225…
。AddItem 〃A〃
。AddItem 〃B〃
。AddItem 〃C〃
。AddItem 〃D〃
。AddItem 〃F〃
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 《 》 〃〃 Then
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 《 》 〃〃 Then
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(〃Sheet2〃)
Me。txtSSN。Text = Range(〃A〃 & indexPlus)。Value
Me。txtLast。Text = Range(〃B〃 & indexPlus)。Value
Me。txtFirst。Text = Range(〃C〃 & indexPlus)。Value
Me。cboxYear。Text = Range(〃D〃 & indexPlus)。Value
Me。cboxMajor。Text = Range(〃E〃 & indexPlus)。Value
Call TabStrip1_Change
Me。MultiPage1(1)。Enabled = True
209
… 页面 226…
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(〃Sheet2〃)。Select
r = ActiveSheet。UsedRange。Rowsunt
nr = r + 1
Range(〃A〃 & nr)。Value = Me。txtSSN。Text
Range(〃B〃 & nr)。Value = Me。txtLast。Text
Range(〃C〃 & nr)。Value = Me。txtFirst。Text
Range(〃D〃 & nr)。Value = Me。cboxYear。Text
Range(〃E〃 & nr)。Value = Me。cboxMajor。Text
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 〃This control is currently unavailable。〃
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(〃Enter the grade in the worksheet?〃; _
vbYesNo; 〃Modify Grade〃)
If YesNo = 6 Then
Me。lblGrade。Caption = cboxGrade。Value
Select Case TabStrip1。Value
Case 0
Range(〃F〃 & indexPlus)。Value = Me。lblGrade。Caption
Case 1
Range(〃H〃 & indexPlus)。Value = Me。lblGrade。Caption
Case 2
Range(〃J〃 & indexPlus)。Value = Me。lblGrade。Caption
Case 3
210
… 页面 227…
Range(〃L〃 & indexPlus)。Value = Me。lblGrade。Caption
End Select
cboxGrade。Value = 〃〃
End If
End Sub
7。 输入过程Calendar1_Click,如下所示:
Private Sub Calendar1_Click()
YesNo = MsgBox(〃Enter the date in the worksheet?〃; vbYesNo; _
〃Modify Date〃)
If YesNo = 6 Then
Me。lblDate。Caption = Calendar1。Value
Select Case TabStrip1。Value
Case 0
Range(〃G〃 & indexPlus)。Value = Me。lblDate。Caption
Case 1
Range(〃I〃 & indexPlus)。Value = Me。lblDate。Caption
Case 2
Range(〃K〃 & indexPlus)。Value = Me。lblDate。Caption
Case 3
Range(〃M〃 & indexPlus)。Value = Me。lblDate。Caption
End Select
End If
End Sub
8。 输入过程TabSt