第1章 使用窗体和控件
为了便于程序与用户间的交互,可以在Excel中创建独立的窗体,在其中添加一些控件,这样就可以让用户像使用Excel内置对话框一样,来使用窗体。不但减少了数据输入的麻烦,而且也使操作界面更加友好。本章将介绍窗体和控件的知识。
1.1Excel中的两类窗体
为了简化输入,可以在Excel工作表中通过添加控件的方式,制作一个交互性极强的表单系统。如图1-1所示的工作表也许您以前曾经看到过,它就是一个工作表窗体,其中放置了一些控件,使得输入与选择数据变得非常简单。这非常适合于开发人员给客户提供的最终Excel应用程序。
在Excel中进行各种操作时,经常会遇到在一个弹出的对话框中选择某个选项或输入某些内容而得到设置结果。如果希望自己定制对话框的外观及可用选项,那么就需要创建用户窗体。如图1-2所示为一个根据用户选择的选项来查询图书的一个查询窗体。
图1-1  一个工作表窗体的例子图1-2  一个用户窗体的例子本章剩下的部分将先介绍创建用户窗体的步骤和方法,然后介绍在工作表中使用控件的方法和技巧。
1.2使用InputBox和MsgBox函数代替窗体
在前几章中,我们已经多次用到了InputBox和MsgBox函数。使用这两个函数可以显
示简单的对话框。因此,如果不需要特别定制复杂的窗体,而只是获取用户的输入或返回一条信息,那么就可以使用InputBox和MsgBox函数来完成。
1.2.1InputBox
InputBox函数分为两种,一种是VB程序中的InputBox函数,另一种是Excel中Appl ication对象的InputBox方法。它们都可以显示一个输入框,用于获取用户的输入信息,然后将返回结果赋值给一个变量以进行其他操作。Excel中的Application对象的InputBox方法比VB程序中的InputBox函数有更强大的功能。
VB程序中的InputBox函数的语法如下:
InputBox(prompt, title, default, xpos, ypos, helpfile, contex t)
InputBox函数中各参数的作用如下:
prompt:显示在输入对话框中的文本(必选)。
title:显示在输入对话框标题栏中的文本(可选)。
default:显示在输入对话框的文本框中的默认值(可选)。
xpos和ypos:窗口左上角的屏幕坐标值(可选)。
helpfile:输入对话框中的帮助文件(可选)。
context:输入对话框中的帮助主题(可选)。
在使用InputBox函数时,通常只会使用前3个参数或者只使用前两个参数,得到如下的简化版本:
InputBox(prompt, title, default)
例如,下面的代码将根据用户输入的内容返回一条信息:
Sub GetInfo()
Dim Ans As String
Ans = InputBox("请输入", "输入信息")
MsgBox "您输入的信息是:" & Ans
End Sub
运行上面的代码,将显示如图1-3所示的对话框。当用户输入一个内容并单击【确定】按钮,将在一个对话框中显示所输入的内容。
图1-3  使用VB的InputBox函数打开的输入对话框
如果在上个例子中用户未输入任何内容或单击【取消】按钮,那么InputBox函数都将返回一个空字符串。为了强制要求用户输入内容,可以设置一个Do While循环,只要输
入的内容为空,那么就一直显示输入对话框等待用户输入,代码如下:
Sub GetInfo()
Dim Ans As String
Do While Ans = ""
Ans = InputBox("请输入", "输入信息")
Loop
MsgBox "您输入的内容是:" & Ans
End Sub
使用VB程序的InputBox函数,返回的内容均为文本类型,如果要获得其他类型的数据,则必须使用VB的内置函数进行转换。更好的解决方法是使用Excel的Application对象的InputBox方法。InputBox方法的语法如下:
InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpCont extID, Type)
可以看出,InputBox方法比InputBox函数多了一个Type参数,使用该参数,可以指定用户输入的数据类型。表1-1列出了Type参数的取值以及代表的数据类型。
表1-1  Type参数的取值与返回的数据类型
Type参数的取值返回值的数据类型
0 公式
1 数字
2 文本(默认)
4 逻辑值
8 单元格引用(Range对象)
16 错误值
64 数值数组
例如,下面的代码需要用户输入一个单元格区域引用,然后对输入的区域进行求和计算,并将计算结果通过信息对话框返回:
Sub GetInfo2()
Dim MyRange As Range
On Error GoTo Canceled
Set MyRange = Application.InputBox(prompt:="请输入一个区域", Title:="输入区域", Type:=8)
MsgBox "所选区域的总和是:" & Application.WorksheetFunction.Su m(MyRange)
Canceled:
End Sub
由于返回值是一个单元格区域(Type参数设置为8),因此,需要先声明一个Range 对象变量,然后使用Set语句将InputBox方法的返回值赋值给Range对象变量,最后使用信息对话框显示结果。运行上面的代码,通过拖动选择区域或手工输入区域,如图1-4所示。
单击【确定】按钮,即可返回计算结果。如果用户单击【取消】按钮,将结束该过程。
图1-4  使用InputBox方法可以指定返回值的数据类型
提示:如果希望拥有多种数据类型的返回值,那么可以使用Type参数中的数值之和。例如,希望返回值可以是数字或文本类型之一,那么可以将Type参数设置为3,即1+2。
使用InputBox方法的另一个好处是,它可以对用户输入的内容进行有效性验证,如图1-5所示。
图1-5  使用InputBox方法可验证用户输入的内容
1.2.2MsgBox
如果要返回一条信息,那么使用MsgBox函数很不错。而且可以根据用户单击不同的按钮再进行指定的操作。MsgBox函数的语法如下:
控件的使用MsgBox(prompt, buttons, title, helpfile, context)
MsgBox函数中各参数的作用如下:
prompt:显示在信息对话框中的文本(必选)。
buttons:显示在信息对话框中的按钮和图标(可选)。
title:显示在信息对话框标题栏中的文本(可选)。
helpfile:信息对话框中的帮助文件(可选)。
context:信息对话框中的帮助主题(可选)。
在使用MsgBox函数时,通常只会使用前3个参数,得到如下的简化版本:
MsgBox(prompt, buttons, title)
例如,在下面的代码中,只简单的显示了一条信息:
Sub ShowInfo()
MsgBox "您好,欢迎使用Excel 2007"
End Sub
运行上面的代码,将显示一条信息,如图1-6所示。
图1-6  显示一条简单的信息
如果设置MsgBox函数的buttons参数,那么可以让返回的信息对话框更加完善,例如下面的代码:
Sub ShowInfo()
MsgBox "您好,欢迎使用Excel 2007", vbOKCancel + VbInformation + vbDefaultButton1, “欢迎信息”
End Sub
运行上面的代码,将显示如图1-7所示的对话框。
图1-7  添加更多内容的信息对话框
表1-2列出了MsgBox函数中buttons参数的取值范围。
表1-2  MsgBox函数中buttons参数的常量
常量名数值说明
vbOKOnly 0
显示【确定】按钮
VbOKCancel 1
显示【确定】和【取消】按钮
VbAbortRetryIgnore 2 显示【终止】、【重试】和【忽略】按钮VbYesNoCancel 3 显示【是】、【否】和【取消】按钮
VbYesNo 4
显示【是】和【否】按钮
VbRetryCancel 5
显示【重试】【取消】按钮
VbCritical 16
显示【重要信息】图标
VbQuestion 32
显示【警告询问】图标
VbExclamation 48
显示【警告信息】图标
VbInformation 64
显示【通知信息】图标
vbDefaultButton1 0 第一个按钮是缺省值
vbDefaultButton2 256
第二个按钮是缺省值
vbDefaultButton2 512
第三个按钮是缺省值
vbDefaultButton2 768
第四个按钮是缺省值
如果将MsgBox的结果赋值给一个变量,那么程序可以根据该变量的值来决定后面的操作。MsgBox函数的返回值见表1-3。
表1-3  MsgBox函数的返回值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。