Excel编程周末速成班第18课:使用用户窗体创建自定义对话框

2021-01-06 11:47:41 浏览数 (1)

主要内容:

  • 用户窗体概述
  • 将用户表单添加到工程
  • 用户窗体设计基础
  • 用户窗体的属性和方法
  • 显示和隐藏用户窗体
  • 用户窗体示例

Excel程序员可以创建自定义对话框以在VBA应用程序中使用。这些对话框在Office中称为用户窗体,可以包含你在属于Excel应用程序本身以及其他Windows应用程序的对话框中看到的所有元素,它们提供了非常强大的编程工具,使你可以为Excel应用程序提供自定义的可视界面。本课程以及接下来的三节课将向你展示如何创建和使用用户窗体。

用户窗体概述

用户窗体由三个紧密相关的部分组成:

  • 窗体本身代表带有标题栏以及Windows操作系统中所有窗口共有的其他组件的屏幕窗口。该窗体通过UserForm对象表示。
  • 窗体上的控件,包括窗体的可视化和功能界面。每种控件都由其自己的类表示。
  • 用户窗体中的VBA代码。严格来说,用户窗体并不总是必须包含代码,但是在大多数情况下,确实需要包含代码。

用户窗体的限制

尽管用户窗体是常规窗口,但它缺少许多程序窗口具有的某些功能。特别是:

  • 用户无法调整窗口大小(尽管可以在VBA代码中调整窗口大小)。
  • 窗口没有最小化和最大化按钮。
  • 窗口没有控制菜单。

然而,用户可以通过拖动其标题栏来移动窗口。

UserForm对象以及可以放置在窗体上的控件具有确定对象的外观和行为以及与该对象相关的任何数据的属性和方法。大多数对象还可以检测事件,其中大部分是用户操作,例如用鼠标单击某些内容。通过将这三个元素(属性、方法和事件)联系在一起,你的VBA代码可以自定义用户窗体的外观和行为,以适合你的应用程序的特定需求。

VBA编辑器使得创建用户窗体的任务变得相当简单。具体地说,窗体设计器使你可以使用WYSIWYG(所见即所得)编辑器直观地设计窗体。所有这些主题都将在本课程以及接下来的两节课中讨论。

窗体设计基础

要将新的用户窗体添加到Excel工程,确保在“工程”窗口中选择了正确的工程。从VBA编辑器菜单中选择“插入➪用户窗体”,编辑器将打开一个新的空白用户窗体。创建用户窗体所涉及的此屏幕组件和其他屏幕组件如图18-1所示,这里说明如下:

  • 用户窗体本身(此图中为空白)是放置控件以创建可视界面的位置。
  • 在用户窗体处于活动状态时,显示工具箱,包含可放在窗体上的各种控件的图标以及一个箭头图标,当你要使用该窗体上的现有控件时可以选择它们。
  • 属性窗口显示当前所选对象的属性。这可以是用户窗体本身或窗体上的控件。
  • 工程窗口在窗体节点下列出了每个工程的所有窗体。
  • 使用“查看代码”和“查看对象”按钮,可以在查看用户窗体的可视界面或其VBA代码编辑窗口之间进行切换。

图18-1:用户窗体设计器的元素

提示:一个VBA工程可以包含任意数量的用户窗体,只要每个窗体都有一个唯一的名称即可。

设计界面

在设计用户窗体之前,帮助你了解各种控件的功能以及最终用户窗体如何显示。本节稍后将讨论控件,接下来讲解窗体设计的基础。

提示:要处理窗体上已有的控件,确保已选择工具箱中的箭头图标。在此模式下,鼠标光标显示为箭头。

  • 要将控件放置在窗体上,在工具箱中单击该控件的图标;然后将图标拖到窗体上以放置控件。
  • 单击窗体上已经存在的控件以将其选中。选定的控件显示带有8个方形手柄的较粗的点画边框,如图18-2所示。

图18-2:已选择的控件显示边框和句柄

  • 要调整控件的大小,选择它,指向它的一个手柄,然后拖动到新的大小。
  • 要移动控件,选择它,指向它的边框,然后拖动到新位置。
  • 要删除控件,选择它,然后按Del键。
  • 要选择窗体,单击其标题栏或控件之间的任意位置。
  • 若要调整窗体的大小,选择它,然后将其白色手柄之一拖动到新的大小。

提示:若要确定与该工具箱中的图标相对应的控件,将鼠标光标停留在该图标上一会儿,工具提示显示控件的名称。

注意:你不必通过拖动来指定窗体的位置,而可以通过设置其Top和Left属性或StartUpPosition属性来指定它的位置。

设置属性

打开用户窗体设计并选择一个对象(窗体或控件)后,该对象的属性显示在“属性”窗口中。此窗口分为三个部分:

  • 顶部的下拉列表显示对象类型和所选对象的名称(名称以粗体显示)。你可以从此列表中选择另一个对象。
  • “按字母序”选项卡按字母顺序列出对象的所有属性。
  • “按分类序”选项卡列出了按类别组织的对象的所有属性,例如外观、数据、字体等。

每个选项卡上都有两列。左列列出属性名称,右列显示当前属性设置。要更改属性,单击其名称。然后,进行更改的方式取决于特定的属性:

  • 对于枚举属性(可以采用一组预定义值中的任何一个),使用右列中的下拉列表选择值。
  • 对于True/False属性,双击以在True和False之间切换值。
  • 对于具有文本或数字值的属性,单击右列,然后输入或编辑该属性值。
  • 对于更复杂的属性,右列会显示一个带有省略号(...)的按钮。单击该按钮可显示属性的对话框。根据需要更改设置;然后关闭对话框以返回到属性窗口。

窗体属性

每个用户窗体都有一组控制其外观和行为的属性。有30多个窗体属性,其中一些不经常使用。记住,可以使用“属性”窗口来设置所有属性,还可以在VBA代码中读取和设置(只读属性除外)。引用属性的语法与其他对象的语法相同:

用户窗体名.属性名

每个用户窗体在创建时都会分配一个名称:UserForm1、UserForm2,等等。此名称(Name属性)是你在VBA代码中用来引用窗体的名称。在创建用户窗体后,建议为其赋予一个描述性名称,以避免必须使用默认名称。

注意:通常,你需要在设计阶段设置所有用户窗体的属性。通常在程序执行过程中在需要的地方更改窗体外观或行为,保留在代码中设置窗体属性的权限。

外观属性

下面的用户窗体属性与其外观相关:

  • BackColor。窗体背景的颜色。在“属性”窗口中设置此属性时,从预定义颜色的调色板中进行选择。在代码中,使用RGB函数设置该属性的RGB值。
  • BorderColor。窗体边框的颜色(如果显示一个)。在代码中,使用RGB值设置该属性。
  • BorderStyle。设置为fmBorderStyleSingle或fmBorderStyleNone。
  • Caption。窗体标题栏中显示的文本。
  • Font。窗体上文本的默认值。有关使用字体的更多详细信息,请参见第14课。
  • ForeColor。窗体上用于文本和绘图的颜色。在代码中,使用RGB值设置该属性。
  • SpecialEffect。控制表单内部的整体外观。有关允许的设置,参见表18-1。

表18-1:设置用于UserForm对象的SpecialEffect属性

行为和位置属性

下列窗体属性控制行为、大小和位置:

  • Height,窗体高度(以磅为单位)。
  • Left,从屏幕左边缘到窗体左边缘的距离,以磅为单位。
  • ShowModal,如果为True(默认值),则在执行任何其他代码之前和使用应用程序的任何其他部分之前用户必须关闭用户窗体。如果为False,则用户可以在仍然显示该窗体时切换离开该窗体,并使用应用程序的其他部分(例如另一个窗体)。
  • StartUpPosition。首次显示时窗体的位置。有关允许的设置,参见表18-2。
  • Top,从屏幕顶部到窗体顶部的距离(以磅为单位)。
  • Width,窗体宽度(以磅为单位)。

注意,仅当StartUpPosition属性设置为Manual时,Top和Left属性才会影响窗体的初始位置。然而,显示窗体后,更改代码中的这些属性将移动窗体。

表18-2:设置用于UserForm对象的StartUpPosition属性

ShowModal属性通常保留其默认值True,这适用于大多数用户窗体,因为直到关闭窗体(例如,当窗体用于接受来自用户的数据输入时),程序继续运行才有意义。然而,在某些特殊情况下,你需要将此属性设置为False。一个示例是创建用户窗体向用户显示有关程序使用的指令,然后希望在用户处理另一窗体时保持该用户窗体的显示状态。

窗体方法

UserForm对象具有一些方法。表18-3中描述了你可能需要的内容。

表18-3:UserForm对象可选的方法

提示:在用户窗体上调用Move方法与设置其Top、Left、Width和Height属性具有相同的效果。

显示、使用和隐藏窗体

这里总结了在你的应用程序中使用窗体所涉及的步骤顺序。这些步骤假定窗体设计已经完成(或至少已经进行了足够的进度以允许进行测试)。此代码假定用户窗体的Name属性为MyUserForm。

1.创建用户窗体的实例,同时声明一个引用该窗体的变量。

Dim frm As New MyUserForm

2.如有必要,使用窗体引用来设置窗体及其控件的属性值。

frm.Backcolor = RGB(210, 210, 210)

frm.TextBox1.Value =“某些文本”

3.向用户显示该窗体。

frm.Show

4.此时,用户通过输入数据,选择选项并执行为窗体设计的其他操作来与窗体交互。

5.完成后,用户通常会通过单击窗体上的按钮来执行一些操作以关闭窗体。窗体中的代码执行Hide方法来隐藏窗体。

Me.Hide

6.现在,程序中的代码可以根据需要从窗体的控件中检索信息。

Response = frm.TextBox1.Value

7.除非要再次使用该窗体,否则请将其引用设置为Nothing以销毁该窗体,以释放该窗体使用的内存。

Set frm = Nothing

提示:在属于窗体的代码中,Me关键字用于引用该窗体(参阅上面的第5步)。由于该窗体的引用在窗体的代码中是隐式的,因此你也可以使用属性和方法名称而无需使用Me限定符。因此,上面步骤5中的代码可以简单地使用Hide。

注意:上面步骤5中的代码行仅是该窗体的一部分。其余所有代码都在程序中,该程序是VBA模块的一部分。

简单的用户窗体示例

本课中介绍的用户窗体旨在说明在Excel应用程序中创建和使用窗体所涉及的一些基本过程,它不执行任何有用的任务,第20课介绍了用户窗体有用的真实示例。

该窗体包含三个控件:

  • 一个文本框,用户可以在其中输入要返回到程序的信息。
  • 将窗体移动到屏幕左上方的按钮。
  • 关闭窗体的按钮。

创建此示例的第一部分是设计表单。

1.在VBA编辑器中,选择“插入➪用户窗体”以将新的用户窗体添加到当前工程。

2.在“属性”窗口中,将窗体的Name属性更改为TestForm,并将其Caption属性更改为“用户窗体演示”。

3.单击该窗体将其激活。然后,在工具箱中,单击“命令按钮”图标。

4.通过在窗体中拖动将按钮放置在所需位置。

5.在“属性”窗口中,将按钮的Name属性更改为“cmdMove”,将其Caption属性更改为“Move”。

6.再次单击该窗体,然后添加另一个命令按钮,将其Name属性更改为cmdClose并将其Caption属性更改为Close。

7.再次返回到窗体,然后将TextBox控件添加到窗体,将此控件的属性保留为默认值。

8.单击工具栏上的“保存”按钮以保存该工程。

至此,窗体设计已经完成,尽管你仍然必须添加一些代码。该窗体应类似于图18-3。

图18-3:完成的用户窗体

下一步是将所需的代码添加到该窗体。该代码放置在事件过程中,并在用户执行某些操作时自动执行(在这种情况下,单击命令按钮时)。稍后你将了解有关事件和事件过程的更多信息。现在,按照指示完成演示项目。

在仍选中用户窗体的情况下,单击“工程”窗口中的“查看代码”按钮,打开用户窗体的代码编辑窗口。注意,此窗口顶部有两个下拉列表,你可以按以下方式使用这些列表:

  • 左侧的列表包含窗体上的所有控件,以及用户窗体本身的条目,如图18-4所示。还包含一个条目(常规)。要编辑控件或窗体的代码,选择此列表中的项目。

图18-4:设置想要编辑代码的对象

  • 右侧的列表列出了第一个列表中所选项目的所有可用的事件过程。选择所需的事件,编辑器将自动输入事件过程的框架。选择(声明)以在任何过程之外输入/编辑代码。

提示:如果在设计过程中双击窗体上的控件或窗体本身,则代码编辑窗口将打开并显示该控件的默认事件过程。默认事件过程(Microsoft员工认为最常使用的过程)是许多控件的Click事件。

要将事件代码添加到演示项目中,按照下列步骤操作:

1.在编辑窗口的左侧列表中,选择cmdClose。

2.右边的列表会自动选择Click事件,因为这是命令按钮控件最常用的事件。事件过程的框架会输入到窗口中,如图18-5所示。

图18-5:编辑器在编辑窗口中自动输入事件过程的框架

3.在过程中的开始和结束行之间输入单行代码Me.Hide。

4.在左侧列表中选择cmdMove。

5.在cmdMove按钮的事件过程中,输入单行代码Me.Move10, 10。

6.单击保存按钮以保存工程。

至此,用户窗体已完成。下一步也是最后一步,就是将代码添加到工程中,从窗体中显示和检索数据。

1.在“工程”窗口中,双击代码模块的名称以打开其编辑窗口。

2.选择“插入➪过程”以显示“添加过程”对话框。

3.输入TestUserForm作为过程名称,然后单击“确定”。空白过程输入到编辑窗口中。

4.将清单18-1中所示的代码输入到该过程中。

清单18-1:显示和测试用户窗体的过程

Public Sub TestUserForm()

Dim s As String

Dim frmAs New TestForm

frm.Show

s =frm.TextBox1.Value

MsgBox "你输入的是 "& s

End Sub

用户窗体演示已完成,你可以通过运行TestUserForm过程对其进行测试。执行时,将显示该窗体。如果单击“Move”按钮,则该窗体将移至屏幕的右上角。单击文本框将其激活,在文本框中输入一些文本,然后单击“Close”按钮。该程序将显示一个带有你输入的文本的消息框,显示VBA代码如何从用户窗体中检索数据。

这是一个简单的演示。课程19和20将提供有关用户窗体的更多信息以及示例,而课程21会提供了两个完整的、真实世界的用户窗体程序。

要点回顾

本课程介绍了如何使用Excel的用户窗体创建自定义对话框。你学到了:

  • 用户窗体可以包含许多其他Windows应用程序中使用的相同控件。
  • 一个VBA工程可以包含所需的任意多个用户窗体。
  • 窗体和控件具有指定其外观和行为的属性。
  • VBA编辑器提供了一个视觉设计工具,使你可以创建用户窗体的视觉界面。
  • 通过在VBA代码中调用窗体的Show方法向用户显示窗体。
  • 在窗体的代码中,你可以使用Me关键字来引用窗体。

自我测评

1.用户窗体的三个主要组成部分中的两个是窗体本身和窗体上的控件,第三个主要成分是什么?

2.哪个属性确定用户窗体标题栏中显示的文本?

3.用户窗体在屏幕上的位置是相对于哪一点进行测量的?

4.模态形式和非模态形式之间有什么区别?

5.当你的程序使用完窗体后,如何销毁该窗体?

VBA学习信息

本文为知识星球:完美Excel社群正在陆续推出的《Excel编程周末速成班》系列中的一篇,到2020年12月27日,此系列已更新至第18课。下面是第1课至第18课的目录:

第1课:MicrosoftExcel编程——为什么及怎么做

第2课:VBA代码编辑器

第3课:Excel对象模型

第4课:VBA语法和数据

第5课:运算符

第6课:控制结构

第7课:过程和模块

第8课:处理日期和时间

第9课:处理文本

第10课:使用Ranges和Selections

第11课:处理列(Columns),行(Rows)和单元格(Cells)

第12课:使用自定义公式编程

第13课:使用Excel内置函数编程

第14课:格式化工作表

第15课:查找和替换操作

第16课:图表编程简介

第17课:高级的图表编程技术

第18课:使用用户窗体创建自定义对话框

0 人点赞