Office VBA从新手到高手
上QQ阅读APP看书,第一时间看更新

第2篇 提高篇

第5章 用户界面设计

本章视频教学录像:32分钟

高手指引

一个合理的程序,总会设计操作便利、视觉感良好的用户操作界面,方便用户输入数据和查询。在VBA中,使用窗体与控件可以实现与表格的交互,也可以设计精美的界面,善用控件可以使自己的程序更具个性,以及增强Office的功能。

重点导读

窗体的概念

控件的使用

用户窗体控件的使用

用户窗体的使用

5.1 窗体的概念

本节视频教学录像:3分钟

窗体是用户界面设计中最重要的概念。窗体是创建任何自定义对话框的基础,它是一个窗口或对话框,用以构成应用程序的用户界面部分。一般可分为工作表窗体和用户窗体。

5.1.1 工作表窗体

最简单的窗体就是Excel的工作表,可以在工作表中插入按钮、标签、文本框等表单控件,通过这些控件可以将Excel的工作表设计成具有自动输入和信息分析功能的简单应用程序,创建窗体的操作很简单,就是在普通的Excel工作表上完成。其一般步骤如下所述。

1 在ExceI中设置输入对应内容,并格式化,以及定义有关公式(和正常操作ExceI一样)。

2 根据需要,在窗体中添加各种控件,设置各控件的内容及数据范围等属性(具体控件的添加方法和设置在下一节详细叙述)。

3 设置各单元格的保护状态,将工作表保护起来。

4 将工作簿保存为模板。

例如:下图是一个正常的学生成绩表格。

现在为这个工作表添加控件,构成工作表窗体。选择选项卡【开发工具】➣【插入】命令,如下图所示,从中选择所需控件。

然后修改添加控件的一些属性及数据范围(上一节已经介绍如何修改)。

5.1.2 用户窗体

用户窗体,在VBA对象中称为UserForm对象。它可以容纳控件,甚至其他窗体。每一个窗体窗口都有【最大化】、【最小化】及【关闭】按钮。当然,窗体本身也属于控件,通过它可以操作工作簿、工作表、单元格、批注、图形对象等,也可以仅仅利用窗体设计单独的程序,完全脱离单元格、工作表等数据载体。用户界面是应用程序的一部分,将用户的操作与Excel工作表中的数据隔离开。就好像不存在Excel一样。

5.2 控件的使用

本节视频教学录像:7分钟

要创建具有各种实际功能的应用窗体,需要在窗体上放置各种不同类型的控件,然后对控件的外观和内部运作机制进行设置,此外,还要为控件编写事件代码,使控件响应特定的事件。本节就介绍各种控件及使用方法。控件大致分为两大类,一类是在工作表中使用的控件,包括窗体控件和ActiveX控件,另一类是在用户窗体中使用的控件。

5.2.1 工作表控件

工作表中可以使用两种控件:窗体控件和ActiveX控件,这些控件构成了工作表窗体,在Excel“开发工具”选项卡中单击“插入”按钮,打开下图所示的控件工具箱,该控件箱中包含“表单控件”和“ActiveX控件”。当鼠标移到某个控件上时,将显示该控件的名称。

1表单控件

也称“窗体控件”,与Excel早期版本的控件是兼容的。可以为这些控件附加一个宏,或者编写、录制一个新宏,当用户单击该控件时,运行该宏。

窗体控件中只有9个可以添加到工作表中,其名称和说明如下所示。

下面通过一个实例介绍如何在工作表中加入窗体控件。

【实例5-1】 在工作表中加入组合框控件(窗体控件)。

1 创建一个空白工作簿,激活工作表Sheet1。

2 选择【开发工具】选项卡,单击【插入】按钮,在弹出的表单控件工具中单击【组合框】控件,如下图所示。

3 此时在工作表中鼠标是“+”形状,拖动鼠标即可在工作表中添加该控件,如下图所示。

4 用右键单击组合框控件,选择【设置控件格式】命令,如图所示。

5 在打开的【设置对象格式】对话框中设置相应内容,如图所示,设置完成后,单击【确定】按钮。

其中数据源区域表示【组合框】中显示的内容来源;这些内容可以实现编辑好,例如本例实现在“E7”单元格内输入“男”,在“E8”单元格中输入“女”。

单元格链接表示当在“组合框”中选定不同内容的时候,此单元格显示所选择内容在数据源区域中的单元格数值。例如当从“组合框”中选择“男”的时候,在单元格“F7”中显示数值1,因为1是“男”在数据源中第1个单元格,同理,如果选择“女”,则单元格“F7”中显示数值2。

到此已经在工作表中设置了窗体控件,只需单击控件外任何一个单元格,退出对控件的编辑。

如果要使用窗体控件,非常简单,如图所示。

其他控件的使用方法类似,这里不一一描述。

2.ActiveX控件

ActiveX控件中许多控件和窗体控件一样,但是可以响应事件,这需要事先在VBE中为不同事件编写不同的响应代码。其中有11个控件常用,除了和前面窗体控件中的8个名称和作用以外,还有文本框(用户输入文本)、切换按钮(多个按钮之间切换)和图像按钮(用于输入图像),但是没有分组按钮。除此之外,还可以单击ActiveX控件中最后一个【其他按钮】,从中选择更多的选项,如下图所示。

下面通过一个实例介绍如何在工作表中加入ActiveX控件。

【实例5-2】在工作表中加入组合框控件(ActiveX控件)。

1 创建一个空白工作簿,激活工作表Sheet1。

2 选择“开发工具”选项卡,单击“插入”按钮,在弹出的ActiveX控件工具中单击“组合框”控件,如下图所示。

3 此时在工作表中鼠标是“+”形状,拖动鼠标即可在工作表中添加该控件,如下图所示,注意此时【开发工具】选项卡中的【设计模式】是选中的。

4 在“组合框”上单击右键,弹出快捷菜单,选择【属性】选项,如下图所示。

5 在【属性】对话框中分别把“LinkedCell”属性后的值设为“B1”,“ListFillRange”属性后的值设为“A1:A7”,如下图所示。

6 单击【开发工具】选项卡中的【设计模式】按钮,退出设计模式。

至此,ActiveX控件已经在工作表中设计完成,如果要使用非常简单,只需单击组合框右侧的下拉箭头,选择所需项目即可,本例事先在“A1:A7”中录入“星期一”到“星期日”,如下图所示。

3. 窗体控件和ActiveX控件的区别

前面看到,窗体控件和ActiveX控件中很多都一样,那么二者之间有什么不同呢?其主要区别如下。

⑴ 窗体控件只能在工作表中使用,而ActiveX控件除了可以在工作表中使用,在后面介绍的用户窗体中也可以使用。

⑵ 窗体控件通过设置控件的格式或指定宏来使用,ActiveX控件拥有很多属性和事件,需要在VBE环境中编码使用。

⑶ 窗体控件通常不需要编写任何代码即可工作,而Activex控件则需要配合VBA代码才能工作。

如果是以编辑数据为目的,一般使用窗体控件就可以了,但如果在编辑数据的同时还要进行其他操作,使用ActiveX控件会更加灵活。

5.2.2 用户窗体控件

用户窗体中的控件与ActiveX控件在功能上是完全相同的,上一节已经提到,窗体本身也是一种特殊的控件,窗体和控件都具有属性,可以通过编码对用户的事件做出相应的操作。这些控件在进入VBA编辑环境后,选择菜单【插入】➣【用户窗体】命令,此时向工程中一个用户窗体,同时“控件工具箱”也会弹出,如下图所示。

通过这些控件可以强化窗体的功能。默认的控件有14个。

1. 标签

标签的英文名称是Label,用代码引用该控件时也使用Lable。它在工具箱中的图标为

在窗体中添加标签时,默认名称和默认Caption都是“Lable1”,添加第二个时默认名和默认Caption都是“Lable2”,可以在代码中以该名称来引用控件。

标签用于在窗体中添加说明性的文本,且该文本在窗体执行阶段是不可修改的,通常由开发者指定标签内容,在特殊情况下也可以根据运行条件自动选择显示的文本内容。

2. 文字框

文字框的英文名称是TextBox,它在工具箱中的图标为

在窗体中添加文字框时,默认名称是“TextBox1”,添加第二个时,默认名是“TextBox2”,用户可以随时修改其名称。

文字框的用途是运行窗体时让用户输入文字或者数值。

3. 命令按钮

命令按钮的英文名称是Command Button,它在工具箱中的图标为

命令按钮的用途是用户单击时可以执行一个或者多个任务。它的显示字符Caption在窗体执行阶断不可以修改。

4. 复合框

复合框(也称组合框)的英文名称是ComboBox,它在工具箱中的图标为

复合框可以画出列表框与文本框的组合。用户可以从列表中选出一个项目或是在一个文框中输入值。

5. 列表框

列表框的英文名称是ListBox,它在工具箱中的图标为

列表框用来显示用户可以选择的项目列表。如果不能一次显示全部项目的话,可以滚动其滚动条来显示其他项目,也可以通过代码让列表框改变高度来适应列表项目的数量。

6. 复选框

复选框的英文名称是CheckBox,它在工具箱中的图标为

复选框用于创建一个方框,让用户容易地选择以指示出某些事物是真或假。

7. 单选框

单选框的英文名称是OptionButton,它在工具箱中的图标为

单选框用于显示多重选择,但用户只能从中选择一个项目。

8. 分组框

分组框(也称框架)的英文名称是Frame,它在工具箱中的图标为

分组框用于创建一个图形或控件的功能组,将窗体中的其他控件分组,特别是有单选框时,分组框有助于用于创建多个单选项。

9. 切换按钮

切换按钮的英文名称是Toggle Button,它在工具箱中的图标为

切换按钮用于创建一个切换开关的按钮,可以在按下和凸起时分别执行不同过程。

10. 多页控件

多页控件的英文名称是MultiPage,它在工具箱中的图标为

多页控件类似于分组框,可以将内有某种联系的控件单独作为一组显示。区别是多个分组框可以同时显示,而多页控件一次只能显示一页。它的功能与TabStrip控件相近。

11. TabStrip控件

它在工具箱中的图表为,类似于“多页控件”,但它不能作为其他控件的容器,没有“多页控件”使用方便。

12. 滚动条控件

滚动条的英文名称是ScrollBar,它在工具箱中的图标为

滚动条提供在长列表项目或大量信息中快速浏览的图形工具,以比例方式指示出当前位置,或是作为一个输入设备,成为速度或者数量的指示器。通常用它替代数字输入。它的功能与旋转按钮相近。

13. 旋转按钮控件

旋转按钮的图标为。它的英文名称为SpinButton,它包含两个箭头,一个用于增加数值,一个用于减少数值,通常将旋转按钮与文本框或标签组合使用,来改变其中的数值。

14. 图像

图像的英文名称是Image,它在工具箱中的图标为

图像控件用于在窗体上显示位图、图标,不能显示动画。通常用它做装饰,可以设置背景。

除默认控件外,用户还可以调用附加控件以强化窗体的功能。事实上很多有用的控件都没有在工具箱中罗列出来,需要用户手工调用。

5.3 用户窗体控件的使用

本节视频教学录像:3分钟

由于用户窗体及控件在实际VBA的使用中应用较多,下面重点介绍在用户窗体中加入控件的方法,以及属性设置及事件的编写。

首先看一下如何向用户窗体中添加控件。

5.3.1 在用户窗体中添加控件

⑴ 如果要向用户窗体中添加控件,可以使用下面3种方法之一。

⑵ 单击工具箱中要使用的控件,然后单击用户窗体内部,将自动按照默认大小绘制所选择的控件。

⑶ 单击工具箱中要使用的控件,然后在用户窗体中通过鼠标绘制指定大小的控件。

⑷ 双击工具箱中要使用的控件,进入锁定模式,然后在用户窗体中可以连续添加相同类型的控件。单击工具箱中要锁定的控件,退出锁定模式。

5.3.2 调整窗体控件位置与大小

控件插入窗体中后,根据需要会对其大小与位置进调整。调整大小时可以用鼠标选择该控件,并用鼠标右键按住其四周的9个控件点之一向任意方向拖动,直到合适大小为止。

而对按钮和标签这类控件,还可以通过菜单【格式】\【正好容纳】来使大小刚好与显示的文字宽度与高度一致。

如果想要使多个控件具有相同的宽度和高度,可以按住【Shift】或者【Ctrl】键,分别单击选中这些控件后,使用【格式】\【统一尺寸】。

调整位置也和调整大小一样,可以分手工拖动和菜单工具两种方式。

手工调整位置即选择对象后随意拖动,甚至可以拖到窗体边缘直到完全不看到控件。

菜单调整方式没有手工调整的任意性,却可以使控件按一定的方式对齐。例如【格式】菜单中子菜单【水平间距】、【垂直间距】、【窗体内居中】、【排列按钮】等,读者可以逐个测试其对齐效果。

5.3.3 设置控件的顺序

当在用户窗体中按下【Tab】键时,可以依次将焦点定位到用户窗体中的每一个控件上,通过设置控件的【Tab】键顺序,可以决定按下【Tab】键时焦点的移动顺序,还可以设置用户窗体启动时焦点最初落在哪个控件上。

1 执行菜单【视图】 【Tab键顺序】命令,如图所示。

2 此时弹出【Tab键顺序】对话框,其中按顺序从上到下显示了控件的Tab键顺序,如果想移动其中某个控件的顺序,可以选中它,然后通过“上移”或者“下移”按键来调整【Tab】键顺序。

当多个控件重叠时,也可以调置其顺序。例如窗体中有一个按钮和一个图像控件,如果先插入按钮,后插入图像控件,那么图像控件会覆盖按钮。如果需要将按钮移至图像控件之上,可以采用以下步骤。

1 选择图像控件。

2 选择菜单【格式】 【顺序】 【移至底层】命令。

当有超过两个控件重叠时,也可以对某个控件进行“上移一层”或者“下移一层”操作,菜单中有相应的功能按钮。

5.3.4 控件的共同属性与非共同属性

当窗体中有多个控件时,它们总有部分共同属性。对于共同属性部分,可以一次性设置完成。

例如窗体中有一个标签和一个按钮控件,那么背景色就是它们的共同属性。可以同时选择两个控件,然后在【属性】对话框中设置,例如将BackColor属性设置为蓝色,那么选中的所有控件都会同时具有该属性,如图所示。

对于非共同属性,只能在每个控件的【属性】窗口中逐个设置。例如要为按钮设置高度,可以选中按钮后,在【属性】对话框中【Height】栏中设置,其他属性的设置类似。

5.4 用户窗体的使用

本节视频教学录像:12分钟

前面已经介绍了窗体的概念,创建窗体及如何在窗体中加入控件,这些都是使用窗体的基本过程。那么窗体和控件添加完成后,下面将介绍如何使用窗体。

5.4.1 显示和关闭用户窗体

使用用户窗体之前必须先将其显示出来,使用完之后需要将其关闭,这些操作都是通过基本的VBA代码进行控制。同时,在显示和关闭用户窗体之前,可以对用户窗体进行加载、隐藏和卸载。

1. 显示用户窗体

显示窗体一般有两种方法,手动方法和代码方法。

手动方法就是常用的运行程序方法,可以执行菜单【运行】➣【运行子过程/用户窗体】命令,或按快捷键【F5】,或者单击工具栏上的【运行】按钮,如下图所示。

下面着重说一下代码方法,这在程序中经常要用到。

显示窗体的语法为:

        Load窗体名
        窗体名.Show

其中第一行代码是加载窗体,给窗体分配内存,但并不能显示窗体,第二行代码才是显示窗体的代码。

提示

这里使用魔棒工具先选择白色的背景区域,然后使用【反选】命令即可。

如果第一行代码省略,只有显示的代码,系统会自动加载窗体,然后再显示。

例如窗体名称为“登录”,现在要显示该窗体,完成的代码如下:

       Load登录
       登录.Show

2. 窗体的显示模式

窗体的显示有两种模式,分别是模式窗体和无模式窗体。默认情况下,用户窗体是模式的。模式意味着在关闭当前用户窗体之前,无法操作除用户窗体之外的其他对象。例如【打开文件】对话框就是一个模式窗体。与模式窗体对应,无模式窗体指即使不关闭窗体,用户仍然可以操作其他对象,就好像不存在这个窗体一样,例如【查找和替换】对话框,即使不关闭对话框,用户仍可以进行对话框之外的操作。

如果希望以无模式方式显示窗体,其语法为:

       窗体名.Show modal

其中modal参数值决定用户窗体是模式的还是无模式的,其取值为1(模式)和0(无模式)。

3. 关闭用户窗体

关闭窗体也有手工方法和代码方法。

手工方法就是单击窗体上的【关闭】按钮即可,如下图所示。

代码方法:如果想取消窗体,可以隐藏或者卸载它。

隐藏窗体的代码如下。

        窗体名称.hide
        卸载窗体的代码
        Unload窗体名称

虽然隐藏和卸载窗体都可以使窗体从屏幕上消失,但有时显示一个隐藏的窗体比显示一个卸载的窗体用的时间短,如果需要反复使用某个窗体的时候,可以用Hide方法隐藏窗体,而不用Unload语句卸载。

5.4.2 编写窗体和控件的事件代码

设计好的用户窗体可以实现与用户交互,例如窗体上有许多按钮,当我们单击按钮时会执行某些操作。这实际上是触发了事件,而编程人员事先为这些事件编写了代码,以响应事件。窗体和控件添加完后,下面的主要任务就是为窗体或者控件加入必要的事件代码,以便用户在进行交互时可以自动运行这些代码。

1. 用户窗体事件

用户窗体包含了大量的事件,可以允许用户与窗体之间进行交互,不过要实现编写这些代码,如果没有编写事件对应的代码,当窗体事件发生的时候,用户窗体不会有任何反应。下表给出了用户窗体常用的事件。

下面通过一个实例看一下窗体事件代码的编写。

【实例5-3】 创建欢迎界面。

许多程序在启动之前都有一个欢迎界面,然后若干事件后,欢迎画面消失,显示主画面,下面这个实例在打开工作簿的时候自动显示一个欢迎画面,5秒后欢迎画面消失,进入登录界面。具体步骤如下。

1 新建一个工作簿。

2 打开VBE编辑环境。

3 选择菜单【插入】 【用户窗体】命令。如下图所示。

4 此时向工程中插入了一个用户窗体,如下图所示。

在窗体上插入两个标签控件、两个文本框控件和一个按钮,分别设置其属性,其属性如下。

登录界面如下所示。

5 选择菜单【插入】 【用户窗体】命令,插入第2个窗体,然后在上面添加一个标签控件。

其属性设置为:

如下图所示。

6 所有窗体和控件添加完成后,下面就可以添加触发事件的VBA代码了。首先鼠标双击左侧ThisWorkbook模块,在代码编辑器中添加代码,其代码如下。

    Private Sub Workbook Open()
      UserForm2.Show
    End Sub

7 双击欢迎界面窗体,打开该窗体的代码窗口,从右上方的下拉列表中选择Activate事件,然后在其中编写代码。

        Private Sub UserForm Activate()
      Application.OnTime Now +
        TimeValue("00:00:05"), "ChangeForm"
        End Sub

8 插入一个模块,在其中编写过程“ChangeForm”。

       Sub ChangeForm()
         Unload UserForm2
         UserForm1.Show
       End Sub

至此制作已经完成,运行程序,看一下具体效果,欢迎界面显示5秒后,自动消失,出现登录界面。

2. 窗体控件事件

除了用户窗体包含事件过程外,用户窗体上的每一个控件也可以包含大量的事件,这些事件也是有用户对控件的操作触发对应事件。

窗体中的任何控件都自己专用事件,但大部分事件窗体的事件在语法上一致。

下面看一个实例,介绍一下窗体上添加的控件事件代码编辑的方法,继续完善前面的实例,为窗体上的【登录】和【取消】两个按钮添加事件响应代码。

【实例5-4】 登录窗体的实现。

本实例是在上面的实例基础上完善,因此前面步骤不再重述,只是继续下面步骤。

9 双击【登录】按钮,在该按钮的Click事件过程中输入下面代码(如果是其他事件,可以按照前面介绍的方法,选择其他事件过程)。

        Private Sub CommandButton1 Click()
          Dim sName As String
          Dim sPwd As String
          Static iCount As Integer
          sName = TextBox1.Text
          sPwd = TextBox2.Text
          If sName = "admin" And sPwd = "123456" Then
          MsgBox "欢迎您使用本系统!"
          Unload Me
          Application.Visible = True
          Else
          MsgBox "用户名或者密码不对,请重新输入"
          iCount = iCount + 1
          TextBox1.Text = “”
          TextBox2.Text = “”
          TextBox1.SetFocus
          If iCount = 3 Then
            MsgBox "对不起,你已经尝试多次,登录失败!"
            Application.Quit
          End If
          End If
        End Sub

程序通过条件语句判断用户输入是否正确,本实例设定用户名为“admin”,口令是“123456”,如果用户名和口令正确,则提示“欢迎您使用本系统!”,并关闭登录窗口,进入Excel界面,否则,提示“用户名或者密码不对,请重新输入”,并且设置一个计数器,记录用户登录次数,超过3次后,直接退出Excel。

10 上级【取消】按钮,在该按钮的click事件过程中输入下面代码。

        01 Private Sub CommandButton2 Click()
        02   Application.Quit
        03  End Sub

程序直接退出Excel。

全部设计好后,可以测试一下登录窗口的功能。当用户名输入正确,

提示

当用户名或者口令错误时,会提示错误信息。

下面再通过一个实例看一下窗体上其他控件的使用。

【实例5-5】 个人爱好调查。

在这个实例中用到了列表框,左边列表框用于显示全部个人爱好,右边列表框是所选个人爱好,当选择某个爱好,单击选择按钮,可以把某项爱好添加到自己的爱好中,如下图所示。

具体事件步骤如下所述。

13 步骤和前面一样,即打开VBA编辑器,插入一个窗体。

4 在窗体上添加2个列表框、2个标签、3个按钮,并在各自的【属性】窗口中修改其属性,如下表所示。

5 双击窗体,在窗体的初始化事件中为左边列表框添加初值。

        Private Sub UserForm Initialize()
        ListBox1.AddItem "田径"
        ListBox1.AddItem "游泳"
        ListBox1.AddItem "篮球"
        ListBox1.AddItem "足球"
        ListBox1.AddItem "乒乓球"
        ListBox1.AddItem "体操"
        ListBox1.AddItem "举重"
        End Sub

6 为命令按钮“>>”添加代码,实现单击该按钮时,将左侧列表框所选内容移到右边列表框。

        Private Sub CommandButton1 Click()
          ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)
          ListBox1.RemoveItem (ListBox1.ListIndex)
        End Sub

7 为命令按钮“<<”添加代码,实现单击该按钮时,将右侧列表框所选内容移到左边列表框。

        Private Sub CommandButton2 Click()
          ListBox1.AddItem ListBox2.List(ListBox2.ListIndex)
          ListBox2.RemoveItem (ListBox2.ListIndex)
        End Sub

8 分别双击左右列表框,输入下面代码。

        Private Sub ListBox1 DblClick(ByVal Cancel As MSForms.ReturnBoolean)
          CommandButton1 Click
        End Sub
        Private Sub ListBox2 DblClick(ByVal Cancel As MSForms.ReturnBoolean)
          CommandButton2 Click
        End Sub

这段代码实现当双击左右列表框的时候,将一个列表框的内容移到另外一个列表框,实际上调用前面两个按钮所定义的过程。

9 单击【退出】按钮,编写退出的事件代码。

        Private Sub CommandButton3 Click()
          Unload Me
        End Sub

10 运行程序,验证效果。

由于篇幅限制,有关窗体中的控件不一一举例。

5.5 综合实战—设计一张调查问卷

本节视频教学录像:5分钟

前面已经介绍过窗体和控件,灵活使用这些控件可以实现与用户交互。下面通过一个具体实例加深对窗体和控件的使用。

【实例5-6】设计一张调查问卷。

1 创建一个空白Excel表,分别输入题目和添加控件。详见下图。

⑴ 添加调查表第一部分:你的性别。

⑵ 添加调查表第二部分:你的年级和你的院系。

⑶ 添加调查表第三部分:最喜欢的课程。

(4) 添加调查表第4部分,合并部分单元格,如图所示。

2 设计背景颜色、文字大小,这里不再叙述,读者可以根据自己的爱好设置。

3 添加一个ActiveX控件,如下图所示。

4 为按钮编辑事件代码,如下图所示。

       Private Sub CommandButton1
        Click()
         Dim xrow As Integer
         With Worksheets("反馈结果")
         xrow = .[A1].CurrentRegion.
        Rows.Count + 1
         .Cells(xrow, "A").Value =
        .Cells(xrow -1, "A").Value + 1
         .Cells(xrow, "B").
        Resize(1, 10).Value = Application.
        WorksheetFunction.
       Transpose([H4:H13].Value)
      .Cells(xrow, "K").Value = [D20].
        Value
        Cells(xrow, "L").Value = [B22]
    .Value
          Union([D20,E20], [B22:F25],
    [H4:H13]).ClearContents
          MsgBox "谢谢你参与调查!"
        End With
        End Sub

上面这段程序实现了在“调查表”中录入内容,然后数据存储到“反馈结果”中,代码首先判断“反馈结果”表中第一行空行,然后把“调查表”中各个录入的数据按照位置放入“反馈结果”表中定义的位置。

5 回到“调查表”,填入数据,单击【提交】按钮,即实现了所要求的功能。