资源描述
对话框和自定义窗体
在第四章,你学习了如何使用Excel内置的InputBox函数在VBA过程执行期间从用户处收集单一数据。但是,万一你的程序在运行时需要多个数据怎么办呢?用户也许希望一次就提供所有数据,或者从项目清单中作出所有合适的选择。如果你定程序必须收集数据的话,那么你可以:
· 使用内置对话框集合
· 创建一个自定义窗体
本章将教你如何从VBA过程里显示内置的对话框,以及从零开始设计你自己的自定义窗体。
Excel对话框
在开始创建自己的窗体之前,你应该花上一些时间学习如何利用Excel内置的对话框,这些内置对话框本来就是为我们准备的。我讲的不是手动选择适合的选项,而是从你自己的VBA过程里调用这些对话框。
Excel有一个特殊的内置对话框集合,它们用开头为xlDialog的常量表示,例如xlDialogClear,xlDialogFont,xlDialogDefineName和xlDialogOptionsView。这些内置对话框是Excel对象,属于内置Dialos集合,每个dialog对象代表一个内置对话框。
表10-1 常用的内置对话框
对话框名称
常量
新建
xlDialogNew
打开
xlDialogOpen
另存为
xlDialogSaveAs
页面设置
xlDialogPageSetup
打印
xlDialogPrint
字体
xlDialogFont
按照下述格式使用Show方法来显示对话框:
Application.Dialogs(常量).Show
例如,下面的语句显示字体对话框:
Application.Dialogs(xlDialogFont).Show
如果你在对象浏览器里面选择Excel库后,再输入xlDialog搜索的话,那些代表Excel内置对话框的常量清单就会显示在对象浏览器里面了(参见图10-1)
1. 打开一个新工作簿并且保存为Chap10.xls
2. 切换到VB编辑器窗口
3. 打开立即窗口
4. 输入下述语句并查看结果:
Application.Dialogs(xlDialogClear).Show
Application.Dialogs(xlDialogFont).Show
Application.Dialogs(xlDialogFontProperties).Show
Application.Dialogs(xlDialogDefineName).Show
Application.Dialogs(xlDialogOptionsView).Show
最后一句指令显示“选项”对话框的“视图”。显示内置对话框后,你可以选择合适的选项,然后Excel就会将当前被选择的单元格,区域或者整个工作表设置相应的格式。
尽管你不能更改内置对话框的外观和行为,但是当你从你的VBA过程显示内置对话框的时候,你可以决定它的初始设置。如果你不更改初始设置,那么VBA将显示对话框和其缺省设置。
假设你要显示清除对话框,并且所有按钮都被选择上。通常Excel显示对话框的时候,内容选项按钮是被选择上的。在立即窗口里输入下列语句:
Application.DialogS(xlDialogClear).Show 1
你可以在Show方法后面加上一系列的参数,在清除对话框里,“全部”选项按钮出现在四个选项按钮组的最开头。Excel通常将可用的选项进行编号,因此,“全部”=1,“格式”=2,“内容”=3,以及“批注”=4。在线帮助可以搜索到内置对话框的参数列表(参见图10-3)
图10-1 前缀为“xlDialog”的常量识别Excel内置对话框
在立即窗口里输入下面的语句,可以显示字体对话框,并且当前选择为“Arial”字体和14字号:
Application.Dialogs(xlDialogFont).Show "Arial", 14
如果只要明确字号的话,那么可以在第一个参数的位置放置一个逗号就行:
Application.Dialogs(xlDialogFont).Show , 8
下面的指令显示“定义名称”对话框,并且在工作簿中的“名称”文本框中输入“John”,“引用位置”里引用到单元格A1:
Application.Dialogs(xlDialogDefineName).Show "John", "=$A$1"
如果你点击确定Show方法就返回True,点击取消则为False。
图10-2 以常量xlDialogOptionsView代表的“选项”对话框“视图”的可用设置
图10-3 Excel内置对话框参数列表
1.文件打开和另存为对话框
OfficeXP中一个新而功能强大的对象是FileDialog。该对象允许你从你的VBA过程里显示文件打开和文件另存为对话框。因为FileDialog对象是Microsoft Office 10.0 Object Library的一部分,所以它在所有的Office XP应用程序里都是可用的。在前期的Excel版本中,程序员使用了两种特殊的方法来显示文件打开和文件另存对话框,这些方法(GetOpenFilename和GetSaveAsFilename)将在本章后面解释。要在你的VBA过程里面使用新的FileDialog对象来显示文件打开对话框的话,你可以输入下列语句:
Application.FileDialog(msoFileDialogOpen).Show
要显示文件另存对话框的话,则使用下面的语句:
Application.FileDialog(msoFileDialogSaveAs).Show
现在,我们在立即窗口里输入上面的语句来看看文件打开和文件另存对话框。
除了文件打开和文件另存为对话框之外,FileDialog对象也能够显示“浏览”对话框,列出文件和文件夹(参见图10-4),或者文件夹(图10-5):
‘ browse the list of files and folders 浏览文件和文件夹清单
Application.FileDialog(msoFileDialogFilePicker).Show
图10-4 文件采集对话框允许用户选择一个或多个文件,该对话框显示文件和文件夹列表,并且标题显示为“浏览”
‘ browse the list of folders 浏览文件夹清单
Application.FileDialog(msoFileDialogFolderPicker).Show
图10-5 文件夹采集对话框允许用户选择一个路径,该对话框显示目录列表,并且标题显示为“浏览”
文件对话框使用的常量列在下面的表格里,前缀“mso”表明这些常量都是Microsoft Office 对象模型里一部分。
msoFileDialog常量
值
msoFileDialogOpen
1
msoFileDialogSaveAs
2
msoFileDialogFilePicker
3
msoFileDialogFolderPicker
4
可以使用FileDialog的Filters属性来控制显示文件的类型。如果你打开文件打开对话框下面的“文件类型”下拉列表框时,你将看到许多可选择的文件过滤器。那里有24种预先设置好的文件过滤器,你也可以在该清单里添加你自己的过滤器。在立即窗口里输入下述语句,我们就可以得到缺省的文件过滤器数目了:
set f = Application.FileDialog(msoFileDialogOpen).Filters
?f.count
FileDialog对象的过滤器储存在FileDialogFilters集合里面。我们来创建一个简单的过程,将缺省的文件过滤器返回到Excel工作表:
1. 在当前VBA工程里插入一个新模块,并且重命名为DialogBoxes
2. 在DialogBoxes代码窗口里输入下面显示的ListFilters过程:
Sub ListFilters()
Dim fdfs As FileDialogFilters
Dim filt As FileDialogFilter
Dim c As Integer
Set fdfs = Application.FileDialog(msoFileDialogOpen).Filters
Sheets(3).Cells(1, 1).Select
Selection.Formula = "List of Default Filters"
With fdfs
c = .Count
For Each filt In fdfs
Selection.Offset(1, 0).Formula = filt.Description & _
": " & filt.Extensions
Selection.Offset(1, 0).Select
Next
MsgBox c & " filters were written to Sheet3."
End With
End Sub
该过程声明了两个对象变量,变量fdfs返回对FileDialog对象里的FileDialogFilters集合的引用,而对象变量filt则储存对对象FileDialogFilter的引用。FileDialogFilters集合的Count属性返回文件过滤器的总数。之后,过程遍历过滤器集合,并且找到每个过滤器的描述和扩展名。
使用FileDialogFilters集合的Add方法,你可以轻易地将你自己的过滤器添加到缺省的过滤器中去。下面修改后代工程ListFilters2示范了如何将临时文件(*.tmp)过滤器添加到过滤器清单中去。该过程里的最后语句将打开文件打开对话框,因此你自己可以检查自定义的过滤器是否已经被添加到了文件类型下拉列表框里。
Sub ListFilters2()
Dim fdfs As FileDialogFilters
Dim filt As FileDialogFilter
Dim c As Integer
Set fdfs = Application.FileDialog(msoFileDialogOpen).Filters
Sheets(3).Cells(1, 1).Select
Selection.Formula = "List of Default Filters"
With fdfs
c = .Count
For Each filt In fdfs
Selection.Offset(1, 0).Formula = filt.Description & _
": " & filt.Extensions
Selection.Offset(1, 0).Select
Next
MsgBox c & " filters were written to Sheet3."
.Add "Temporary Files", "*.tmp", 1
c = .Count
MsgBox "There are now " & c & " filters." & vbCrLf _
& "Check for yourself."
Application.FileDialog(msoFileDialogOpen).Show
End With
End Sub
你可以使用FileDialogFilters集合的Clear方法清除所有预设的过滤器。修改一下上面的过程,在添加自定义的临时文件(*.tmp)过滤器之前,清除内置的过滤器。
当你从文件打开对话框里选择一个文件时,该被选择的文件名称和路径就会被放置在FileDialogSelectedItems集合里。使用SelectedItems属性可以返回FileDialogSelectedItems集合。通过设定FileDialog对象的AllowMultiSelect属性为True,用户就可以同时按下Shift键或者Ctrl键和文件名称,选择一个或多个文件。
接下来的过程示范了如何使用上面提及的属性,该过程打开一个新的工作簿并且插入一个列表框控件。允许用户选择一个以上的文件,然后被选择的文件将加入到该列表框控件里,并且加亮第一个文件名。
Sub ListSelectedFiles()
Dim fd As FileDialog
Dim myFile As Variant
Dim lbox As Object
Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
.AllowMultiSelect = True
If .Show Then
Workbooks.Add
Set lbox = Worksheets(1).Shapes. _
AddFormControl(xlListBox, _
Left:=20, Top:=60, Height:=40, Width:=300)
lbox.ControlFormat.MultiSelect = xlNone
For Each myFile In .SelectedItems
lbox.ControlFormat.AddItem myFile
Next
Range("B4").Formula = _
"You've selected the following " & _
lbox.ControlFormat.ListCount & " files:"
lbox.ControlFormat.ListIndex = 1
End If
End With
End Sub
图10-6 使用过程ListSelectedFiles(见上面)将用户选择的文件添加到工作表中列表框控件中去
注意,Show方法不会将用户所选的文件打开,它仅仅显示文件打开对话框。当用户点击“打开”按钮时,文件名称通过SelectedItems属性从SelectedItems集合里获得。如果你希望用户点击“打开”按钮时立即执行文件的打开操作的话,你就应该使用FileDialog对象的Execute方法。下面的过程示范了如何立即打开用户选择的文件:
Sub OpenRightAway()
Dim fd As FileDialog
Dim myFile As Variant
Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
.AllowMultiSelect = True
If .Show Then
For Each myFile In .SelectedItems
.Execute
Next
End If
End With
End Sub
2.GetOpenFilename和GetSaveAsFilename方法
从多年以前开始,Excel就给程序员们提供了两种方便的VBA方法来显示文件另存为和文件打开对话框:GetOpenFilename和 GetSaveAsFilename。这些方法只有在Excel里可用,并且在Excel2002里面如果需要向后兼容的话仍然可用。
GetOpenFilename方法显示“打开”对话框,在那里你可以选择要打开的文件名称,第二个方法(GetSaveAsFilename)则显示另存为对话框。
1. 在立即窗口输入下面的指令:
Application.GetOpenFilename
Application.GetSaveAsFilename
Application.GetSaveAsFilename ("Plan2.xls")
GetOpenFilename方法从用户处获得文件名称,而不必实际打开某特定的文件。该方法有四个可选的参数,经常使用的是第一和第三个参数,显示入下表:
GetOpenFilename参数
描述
fileFilter
该参数决定了对话框的文件类型(译者:原文为Save as type,有误)下拉框了的内容。例如,要在文件类型下拉框里显示“Excel Files(*.xls)”的话,你就应该输入下列文本作为fileFilter: “Excel Files(*.xls), *.xls”(译者:“Excel Files, *.xls”也一样。)过滤器的前面部分(逗号前)决定文件类型下拉框要显示的文本,第二部分(逗号后)明确你要显示的那种类型的文件。确保你按照表格里的例子试验一下。
title
这是对话框的标题,如果忽略,对话框将显示标题为“打开”
在立即窗口里输入下列语句(确保在一行输入),来看看这些参数是如何使用的:
Application.GetOpenFilename("Excel Files(*.xls), *.xls"),,"Highlight the File"
GetOpenFilename方法返回所选的或者指定的文件名称,该名称之后可以在你的VBA过程里用来打开该文件,例如:
yourFile = Application.GetOpenFilename
?yourFile
C:\EXCEL\Mark.xls
Workbooks.Open Filename:=yourFile
在上面的例子里,文件名称被赋予变量yourFile,接下来的两条输入为询问文件名称(?yourFile)和显示该名称(C:\EXCEL\Mark.xls)。第四条语句打开变量yourFile明确的文件。如果你通过点击Esc键或者对话框上的取消按钮来取消对话框的话,那么GetOpenFilename方法就会返回False。
GetSaveAsFilename方法返回文件名和路径,然而,它不会自动地保存该特定的文件。输入下述指令提供文件名称:
Application.GetSaveAsFilename ("Plan2.xls")
如果你忽略文件名称的话,Excel就会显示当前活动文件的名称。当你使用GetSaveAsFilename方法时,你可以明确文件过滤器和对话框自定义标题:
yourFile = Application.GetSaveAsFilename(“Plan2.xls”, "Excel Files(*.xls), *.xls",,"Name your file")
要显示另存为对话框的话,就要将GetSaveAsFilename方法的结果赋予一个变量,如上所示。
3.创建窗体
尽管内置的对话框很方便使用,但是它并不能满足你所有的VBA应用程序的要求。除了将对话框显示在屏幕上和初始化它的设置之外,你不能控制对话框的外观,你不能决定增加哪个按钮,删除哪个按钮,而哪个又移动,同样,你不能改变内置对话框的大小。如果你想用提供一个自定义的界面的话,那么你的唯一办法就是创建一个用户窗体。
用户窗体看上去就像一个自定义对话框,你可以在上面添加各种各样的控件,给这些控件设置属性以及编写对窗体反应的VBA过程和控制事件。窗体是单独的对象,你可以在VB编辑器菜单里选择“插入”|“用户窗体”来添加窗体。
窗体可以在不同的应用程序之间分享使用,例如,你可以在Word或者任何其它使用VB编辑器的应用程序里面,重新使用Excel里设计的窗体。
按照下述步骤创建自定义窗体:
· 切换到VB编辑器窗口
· 选择“插入”|“用户窗体”
一个叫做窗体的文件夹显示在工程浏览器窗口,该文件夹包含一个空白用户窗体。工作区域自动显示窗体和带有添加控件的工具箱。
图10-7 通过选择插入菜单里面的用户窗体可以添加一个新的窗体到活动VBA工程
属性窗口(见图10-8)显示很多种属性,你可以根据你的需要进行设置。该窗体属性安排成七个类别:外观,行为,字体,杂项,图片,位置和滚动。要按类别显示窗体属性的话,那么可以点击属性窗口上的“按分类序”。要查找某特定属性的信息的话,可以点击该属性名称并且按下F1键,在线帮助将启动该属性描述主题。在你的VBA工程里添加新窗体后,你应该通过设置“名称”(Name)属性给该窗体设置一个独特的名称,除了名称之外,每个窗体还应该包含一个标题,你可以使用Caption属性给你的窗体设置标题。
技巧10-1 在VBA应用程序之间共享窗体
所有使用VB编辑器的VBA应用程序在创建自定义窗体时共享一些功能特点,你可以通过从文件中导出和导入,或者通过拖曳窗体对象到另一个工程来共享你的窗体。要导入或者导出窗体文件,可以选择“文件”|“导入”或者“文件”|“导出”。在你导出某个窗体文件之前,确保你在工程浏览器窗口里选中了该窗体。在将窗体拖曳到一个不同的VBA应用程序之前,你得安排好VBE窗口,确保你能同时看到两个应用程序的工程浏览器窗口,拖住工程浏览器里的窗体名称到另外一个工程浏览器。
图10-8 使用属性窗口,你可以很容易地更改你自定义窗体的外观,行为和其它特点
4.创建用户窗体的工具
当你设计一个窗体时,你可能要插入一些合适的控件来使它有用。工具箱包含了标准VB所有你可以添加到窗体上的控件按钮,它也可以包含已经安装在你电脑上的额外的控件。工具箱可用的控件被称为ActiveX控件,这些控件能够对特定的用户行为例如点击该控件或改变它的制作出反应。你将在本章剩余的部分学习如何使用工具箱控件。
图10-9 工具箱显示了可以添加到你的自定义窗体的控件(译者:在每台电脑上的工具箱上显示控件可能不一样,可以通过“附加控件”在工具箱上添加额外的控件按钮)
Microsoft Office套装提供了额外可以放置在工具箱上以快速访问的ActiveX控件,如果你的电脑上还安装了其它包含ActiveX应用程序的话,那么你也可以将它们放置在工具箱上。依照下述步骤在工具箱上添加其它的ActiveX控件:
1. 在工具箱上(非控件区域)单击右键并且点击“新建页”,并且选择重命名
2. 在“题注”框里面输入新名称“额外控件”,在“控件提示文字”框里面输入“额外的ActiveX控件”,点击确定返回到工具箱
3. 在新页的任意地方单击右键,并从快捷菜单中选择“附加控件”。如果该选项不可用的话,那么确定你在该页区域单击右键,而不是点击“额外控件”本身
4. 当附加控件对话框出现时,点击你要添加的每个控件前面的选项按钮。图10-10显示了加亮的日历控件。当你点击确定时,这个控件就会出现在工具箱的当前页上
图10-10 你在工具箱上附加额外安装在你电脑上的ActiveX控件
在接下来的几段中将描述标准的VB控件。
5.标签
标签允许你在窗体上添加文本,标签控件经常用来添加字幕,标题,抬头和解释。你可以使用标签给那些不带Caption属性的控件(例如文字框,列表框,滚动条和旋转按钮)加上标题。你可以给标签定义快捷键,例如,在添加完标签控件和设置它Accelerator属性后,通过按下Alt键和某个特定字母键,你就可以立即激活该控件(译者:激活标签控件后面的控件,例如文字框,列表框等。这是一个非常有用的工具!)。要给某个已经存在的控件添加一个标题或者一个键盘快捷键的话,你就应该添加一个标签控件,并且在它属性窗口的Accelerator属性里输入一个字母。下一步选择“视图”|“Tab键顺序”,并且确保该标签名称出现在你要使用快捷键激活的控件名称之前。你将在本章后面学习如何使用Tab键顺序对话框(参见图10-14)
6.文字框
文字框是最流行的窗体控件,因为它们可以用来显示或者从用户处获取数据。你可以在文字框里输入文本、数字、单元格引用或者公式。通过更改MultiLine属性设置,你可以在文字框里输入一行以上的文本。当你设置了WordWrap属性时,文本行可以自动换行。此外,如果你将EnterKeyBehavior属性设置为True,同时MultiLine属性也为真的话,那么你将能够在文字框里面通过按下回车键开始新的一行。另外一个属性EnterFieldBehavior,决定当用户选择文本区域时是否选择文本(译者:应该说激活该控件,例如说使用Tab键来激活文字框。),设置该书写为0(fmEnterFieldBehaviorSelectAll)的话,将会选择该区域的所有文本,设置该属性为1(fmEnterFieldBehaviorRecallSelection)的话,将仅仅选择用户上次激活该区域时选择的文本。如果你想要限制用户在文字框输入字符数的话,那么你可以设置MaxLength属性的字符确切数目。
7.框架
框架允许你可视地组织和逻辑地聚合窗体上面的各种控件。当你使用框架控件包围选项按钮时,VB将这些按钮视为相互排斥的,你同时只能选择其中的一个按钮,因此,如果用户选择了可用的选项按钮之一i,那么其它的选项按钮就不能再被选择。在本章的后面,你将找到使用两个框架的“信息调查”窗体示例。其中一个将“硬件”和“软件”选项按钮组织成一个逻辑化的集合,而第二个框架则将和电脑类型相关的复选框集中到一起(参见图10-11)。
8.选项按钮
选项按钮让你在许多相互排斥的选项中选择一个,选项按钮通常以两个或者多个按钮组织在一起并且包围在一个框架之内。在任何时刻,只能选择一个选项按钮。当你选择一个新选项按钮,之前被选择的选择按钮就会自动取消选定。要激活或者失活一个选项按钮的话,只要将它的Value属性设置为True或者False。True意味着该选项被激活,False则意味着该选项失活。
9.复选框
复选框用来将具体的选项打开或者关闭,不同于选项按钮只让你同时选择一个选项,用户可以同时选上一个或者多个复选框。如果复选框被选择,那么它的Value属性就设置为True,如果复选框没有被选择,那么它的Value属性则设置为False。
10.切换按钮
切换按钮看上去像命令按钮,而作用与选项按钮类似。当你点击切换按钮时,该按钮会保持凹下去,如果再点击一次的话,按钮则恢复正常。按下的切换按钮的值属性为True。
11.列表框
除了可以使用文字框提示用户输入明确的数据之外,有时候提供一个可供选择的清单可能会更好,列表框排除了输入错误数据的可能性。列表框的内容可以在工作表中敲入,也可以直接从VBA过程里使用AddItem方法添加。RowSource属性指定显示在列表框里面的数据源,例如引用$A$1:$B$8,列表框里将显示这些区域里的内容。
当你设置ColumnCount属性时,列表框可以显示一列或者多列数据。另外一个属性,ColumnHeads,可以设置为True,显示列表框的列标题。用户也没有限制只选择一个选项,如果过程需要选择两个或者多个列表项目的话,你也可以设置MultiSlect属性为True。
12.复合框
复合框是一个结合文字框和列表框在一起的控件,该控件经常用来节省窗体上的空间。当用户点击复合框右边的下拉箭头时,它会打开显示一系列可供选择的项目。如果里面没有一个适用的选项的话,你可以将MatchRequired属性设置为False,这样就允许用户直接输入一个新的数据。ListRows属性决定了下拉清单出现时,显示的项目数。Style属性决定了复合框的类型。使用0(fmStyleDropDownCombo)可以允许用户从清单里选择一项或者在文字框里输入一新项。如果要限制用户的选择只能在该复合框的可用清单里的话,那么就将Style属性设置为2(fmStyleDropDownList)。
13.滚动条
你可以在窗体上放置水平的或者竖直的滚动条。尽管滚动条通常使用于定位窗口,但是它也可以用在你窗体上来输入一些预设范围的数值。滚动条的当前值由Value属性设置或者返回。滚动条的Max属性让你设置它的最大值,而Min属性则决定了它的最小值。LargeChange属性决定了当用户点击滚动条内部时Value属性的改变值。同样,当使用滚动条编程时,不要忘记设置SmallChange属性,它决定当你点击滚动条的箭头时Value属性如何改变。
14.旋转按钮
旋转按钮作用类似于滚动条。你可以点击旋转按钮来增加或者减小某个数值。旋转按钮经常和文字框一起使用,因为这样用户就可以使用旋转按钮在文字框里敲入精确的值或者选择数值。和文字框一起使用旋转按钮的技术将会在本章后面讨论到。
15.图像
图像控件让你可以在窗体上显示图像,该控件支持下列文件格式:*.bmp,*.cur,*gif,*.ico,*.jpg和*.wmf。就像工具箱里的其它控件一样,图像控件也有许多属性可以设定。例如,你可以使用PictureSizeMode属性控制图片的外观,该属性有三种设置:0(fmPictureSizeModeClip将不在图片框里面的部分截除),1(fmPictureSizeModeStretch水平或竖直拉伸图片,使之正好适合图片框)和3(fmPictureSizeModeZoom按比例放大图片)。
16.多页控件
多页控件可以在窗体顶部显示一系列的页面(参见图10-17)。每小页作为单独的页面使用。使用多页控件,你可以设置包含两页或多页的窗体,你可以在每页上放置不同的控件。当一个窗体包含很多的数据时,它的可读性便降低了。点击窗体页要比在一个使用滚动条的长窗体上移动要轻松的多。默认上,每个多页控件在窗体上显示两页,通过快捷菜单可以添加新页,也可以在VBA过程里使用Add方法添加新页。本章中的第二个实践练习时犯了如何使用该控件来追踪学生的考试分数。
17.TabStrip控件
虽然TabStrip和多页控件看上去非常相似,但是它们有各自不同的作用。TabStrip控件(参见图10-17)允许你使用相同的控件来显示多套相同的数据。假设窗体显示学生的考试,每个学生必须通过相同科目的考试。每个科目可以放在一个单独的页上(tab),每页包含相同的控件来收集得分和考试日期。当你激活任何页的时候,你将看到相同的控件,只有这些控件里的数据变化。参见本章的第二个实践练习,看看如何使用TablStrip控件。
18.RefEdit控件
RefEdit控件是专门在Excel里面创建的窗体控件,它允许你在工作表里选择一个单元格或者单元格区域并且传递到你的VBA过程。看一下一些Excel内置对话框,你就可以看到这个控件是如何工作的,例如,“数据”菜单里的“合并计算”对话框就有一个标为“引用位置”的RefEdit控件,让你选定想要进行合并计算的数据区域。点击RefEdit右边的按钮,可以在选择单元格区域的时候暂时隐藏对话框。本章的第二个实践练习使用RefEdit控件给列表框添加学生姓名。
19.在窗体上放置控件
当你创建自定义窗体的时候,你将工具箱里可用的很多控件(参见图10-9)放置在一个空窗体上。选择什么样的控件取决于控件需要储存的数据类型,以及你窗体的功能。当你使用窗体时,工具箱总是可见的,你可以在屏幕上移动它,改变它的大小,或者当你将所有需要的控件放在窗体上了并且你要做的只是设置它们的属性,你也可以关闭它。临时被移除的工具箱也可以通过选择“视图”|“工具箱”重新显示。
工具箱的使用是很容易的,要在窗体上添加新控件的话,可以先点击工具箱上面的控件图标,然后在窗体上点击一下或者画一个框。在窗体上点击一下(不画框)将会在窗体上放置一个缺省大小的控件。每个控件的标准设置可以在它的属性窗口里查找到。例如,标准的文字框大小为18X72磅(参见文字框的Height和Width属性)。在窗体上放置控件后,“选定对象”按钮(用箭头代表)成为工具箱上的活动控件。如果你双击工具箱上的控件时,你可以随你需要画上很多这个控件。例如,要快速在窗体上放置三个文字框,可以双击文字框控件,然后在窗体上点击三次。点击工具箱上的选定对象按钮,可以失活所选的控件。
技巧10-2 设置网格选项
当你在窗体上拖曳控件时,VB将调节控件以使得它和窗体的网格对齐。通过使用“选项”对话框你可以按你的喜好设置窗体的网格。要访问网格选项的话,可以选择“工具”|“选项”,然后点击选项对话框的“通用”页,窗体网格设置区域允许你关闭网格、调整网格大小,以及决定是否需要控件和网格对齐。
20.应用程序示例1:信息调查
既然你已经通读了创建用户窗体的理论知识,并且了解了工具箱上不同控件之间的区别,你已经可以来做一些实践练习了。你可能也知道,理解一个复杂特征的最好方式就是将它应用到一个实际生活的项目中。在这部分,你将给合作者创建一个自定义窗体,他要求你将给工作表输入调查数据的单调过程简单化。使用该窗体时(参见图10-11),你将有机会体验许多控件和它们的属性,另外,你也将学习如何将数据从你的窗体转移到工作表(参见图10-12)
在本章结束的时候,你将拥有创建自定义窗体的必要技能,适应你VBA应用程序独特的要求。
1. 在工程浏览窗口,选中工程VBAProject(Chap10.xls)并且在属性窗口将工程名称改为CustomForms
2. 选择“插入”|“用户窗口”,添加一个空白窗体
3. 在属性窗口,双击Name属性并输入InfoSurvey,将窗体的缺省名称(UserForm1)更改掉。你将在VBA过程里使用给名称引用到该用户窗体
4. 双击Caption属性,并输入窗体新标题:Info Survey。该名称将出现在窗体的标题栏上
5. 双击BackColor属性,点击“调色板”并且给窗体底色选上一种颜色
图10-11Info Survey窗体允许用户通过作一些适当的选择就可以快速地数据数据
图10-12 每次使用窗体Survey后,用户的选择就会写入到工作表里面
21.在窗体上添加按钮、选项框和其它控件
给自定义窗体设置完初始属性(Name和Caption)后,我们继续来给窗体放置需要的控件吧。这里是一步一步的指导如何准备如图10-11显示的窗体。
1. 更改窗体大小
当你在工程里插入的缺省窗体太小,不够放置你VBA程序要求的控件时,你可以按照下述方法之一来更改它的大小:
a. 使用鼠标调整大小
· 点击窗体的空白部分,窗体周围便会出现好几个选用符
· 将鼠标放在窗体右边中间的选用符上,并且将其向右拖曳至你想要的位置,释放鼠标
· 将鼠标放在窗体下边中间的选用符上,并且将其向下拖曳至你想要的位置,释放鼠标
b. 通过属性窗口调整窗体大小:
每个新建的窗体缺省大小为180 X 240。窗体尺寸单位是磅。一磅等于1/72英寸。输入窗体两个属性:Height和Width的新数值,可以改变窗体的大小。
· 点击窗体的标题栏(显示“Info Survey”的地方)
· 在属性窗口,双击属性Height并且输入值252.75,更改Width属性为405.75
为了避免重复工作,总是在添加需要的控件之前调整窗体的大小。
2. 添加框架
· 点击工具箱上的框架控件,这时鼠标光标变成了一个十字架并且跟随着被选择控件的标志
· 指向窗体的左上角,然后点击并拖曳鼠标画出一个小矩形。当你释放鼠标后,你将看到一个标题为“Frame1”的小矩形。当该框架被选择上后,它旁边就会出现一些选用符,并且属性窗口的标题栏便会显示“属性-Frame1”
· 在属性窗口,双击Caption属性并将默认的标题Frame1改为“Ma
展开阅读全文