Excel 使用用户界面

更新时间:2023-09-28 23:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第 8 章 使用用户界面

第 8 章 使用用户界面

用户界面是用户使用 VBA 处理数据时经常使用的对象。在用户需要使用数据交互时,

用户界面是一个非常有用的工具。用户可以根据需要向用户窗体添加各种功能的控件,实 现各种复杂的交互作用。

8.1 使用内置对话框

在 Excel 中,为了用户开发的便利,提供了多种固定功能的对话框。用户在实际开发 过程中,根据需要调用对应的内置对话框。在本小节中,将结合具体的例子来说明如何使 用内置对话框。

案例 153 使用“打开”对话框

1.功能说明

在程序中需要交互式地打开某个文件时,如果使用 InputBox 函数让用户输入路径和文 件名,容易出错并且不直观。在这个时候,用户可以选择使用对话框。

2.语法说明

在 Excel VBA 中,使用 Application 对象的 GetOpenFilename 方法将打开标准的“打开” 对话框,让用户在计算机中选择盘符、路径、文件类型和文件名等信息。其语法格式如下:

表达式.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

该方法的参数都可省略,各参数的含义如下:

? FileFilter:一个指定文件筛选条件的字符串。

在 FileFilter 参数中传递的字符串由文件筛选字符串对以及后跟的 DOS 通配符文件筛 选规范组成,中间以逗号分隔。每个字符串都在“文件类型”下拉列表框中列出。例如, 下列字符串指定两个文件筛选——文本和加载宏:

“文本文件 (*.txt)、*.txt、加载宏文件 (*.xla)、*.xla”。

如果省略 FileFilter,则此参数默认为

“所有文件 (*.*),*.*”

要为单个文件筛选类型使用多个通配符表达式,需用分号将通配符表达式分开。例如:

\文件(*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm,\

? FilterIndex:指定默认文件筛选条件的索引号,取值范围为 1 到由 FileFilter 所指定的 筛选条件数目。如果省略该参数,或者该参数的值大于可用筛选条件数,则使用第一

337

Excel VBA 语法词典

个文件筛选条件。

? Title:指定对话框的标题。如果省略该参数,则标题为“打开”。 ? ButtonText:在 PC 中不可用。 ? MultiSelect:如果为 False(默认值),则只允许选择一个文件名。如果为 True,则允

许选择多个文件名,返回值是一个包含所有选定文件名的数组,即使在“打开”对话 框中只选定了一个文件名,也将返回到一个数组中。

注意:当用户在该对话框中单击“打开”按钮时将返回选择的路径和文件名,但并不真正执行打开操

作。

3.案例说明

在本例中,将在程序代码中使用内置的“打开”对话框,选择用户需要查看的文件。 然后将文件名显示在工作薄中。

4.编写代码

使用“打开”对话框的程序代码如下:

Sub OpenDiag()

Dim sFilt As String Dim sTitle As String Dim sMsg As String Dim sFname As Variant Dim i As Integer Dim sf As Variant

sFilt = \文本文件(*.txt),*.txt,\

\所有文件(*.*),*.*\

sTitle = \打开文件\

sFname = Application.GetOpenFilename _

(filefilter:=sFilt, Title:=sTitle, MultiSelect:=True) If Not IsArray(sFname) Then

MsgBox \请选择文件!\Else

i = 1

ActiveSheet.Columns(1).Clear For Each sf In sFname

sMsg = sMsg & sf & vbCrLf ActiveSheet.Cells(i, 1) = sf i = i + 1 Next End If End Subf

338

第 8 章 使用用户界面

5.运行结果

运行程序代码,选择系统的文件类型,如图 8.1 所示。

图 8.1 选择系统文件类型

选择多个文件,然后单击对话框中的“打开”按钮,如图 8.2 所示。

图 8.2 选择打开多个文件

关闭对话框,查看 Excel 文件中的保存信息,如图 8.3 所示。

339

Excel VBA 语法词典

图 8.3 Excel 文件中的保存路径信息

6.程序分析

在上面的代码中,首先显示一个“打开”对话框,选中的文件名将返回到数组中,使

用 IsArray 函数检测返回值,如果不是数组则表示没有选择文件。最后使用循环语句将数 组中的文件名逐个取出来填充到工作表中。

案例 154 使用“保存”对话框

1.功能说明

和“打开”对话框类似,用户同样可以使用 VBA 代码调用“保存”对话框,用来保 存文件。

2.语法说明

与 GetOpenFilename 方法类似,使用 Application 对象的 GetSaveAsFilename 方法可打 开标准的“另存为”对话框,在该对话框中用户可以选择(或输入)一个文件名。其语法 格式如下:

表达式.GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText)

该方法的参数与 GetOpenFilename 方法类似,可参见上例中的介绍。

3.案例说明

在本例中,将调用系统内置的“保存”对话框,选择保存文件,并显示保存文件的路 径。

4.编写代码

使用“保存”对话框的 VBA 代码如下:

Sub UserSaveAS()

Dim sFilt As String

340

第 8 章 使用用户界面

Dim sTitle As String

Dim sMsg As String Dim sFname As Variant

Dim fileSaveName As String

sFilt = \文件(*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm,\

\所有文件(*.*),*.*\sTitle = \保存文件\

fileSaveName = Application.GetSaveAsFilename(filefilter:=sFilt, _

FilterIndex:=2, Title:=sTitle)

If fileSaveName <> \

MsgBox \文件保存路径是:\End If End Sub

5.运行结果

运行程序代码,选择系统的文件类型,如图 8.4 所示。

图 8.4 保存文件

6.程序分析

本例的程序代码和前面小节类似,就不详细展开分析。

341

Excel VBA 语法词典

案例 155 调用内置对话框

1.功能说明

前面案例介绍 Excel 的内置对话框,都是通过 Application 对象的方法形式来显示的。 在 Excel 中还有更多的内置对话框,这些对话框组成了 Dialogs 集合。用户可以使用该集 合调用内置对话框。

2.语法说明

在 Excel 2007 中,Dialogs 集合包括了多个内置对话框。可使用以下代码查看内置对 话框具体的数量:

MsgBox Application.Dialogs.Count

每个内置对话框由一个预定义的常量表示,要显示某个对话框,只需使用 Dialogs 集 合对象的 Show 方法即可。

如使用以下代码,将显示 Excel 的“打开”对话框。

Application.Dialogs(xlDialogOpen).Show

3.案例说明

本例的主要功能是在程序代码中调用内置的“打开”和“另存”对话框。

4.编写代码

(1)调用“打开”对话框的 VBA 代码如下:

Sub UserOpenFiles()

Application.Dialogs(xlDialogOpen).Show End Sub

(2)调用“另存”对话框的 VBA 代码如下:

Sub USerSaveFiles()

Application.Dialogs(xlDialogSaveAs).Show \自定义文件.xlsm\End Sub

5.运行结果

运行第一段程序代码,调用“打开”对话框,如图 8.5 所示。

342

第 8 章 使用用户界面

图 8.5 “打开”对话框

运行第二段代码,调用“另存为”对话框,如图 8.6 所示。

图 8.6 “另存为”对话框

6.程序分析

用户可以将本例的代码和前面案例中的代码进行比较,查看两种打开对话框方法的不

同。

案例 156 调用功能区功能

1.功能说明

功能区是 Excel 2007 新增的对象,用户可以通过 VBA 代码调用功能区的功能。

343

Excel VBA 语法词典

2.语法说明

在 Excel 2007 中,使用 CommandBars 集合的 ExecuteMso 方法可执行由 idMso 参数标 识的控件功能。在 Excel 2007 中,内置按钮等控件都具有 idMso 参数,通过 ExecuteMso 方法可调用这些控件的功能,该方法的语法格式如下:

表达式.ExecuteMso(idMso)

参数 idMso 为控件的标识符。

3.案例说明

本例的主要功能是在程序代码中调用内置的“打开”和“另存为”对话框。

4.编写代码

(1)调用“打开”对话框的 VBA 代码如下:

Sub 打开文件()

Application.CommandBars.ExecuteMso (\End Sub

(2)调用“另存为”对话框的 VBA 代码如下:

Sub 另存文件()

Application.CommandBars.ExecuteMso (\End Sub

5.运行结果

运行第一段程序代码,调用“打开”对话框,如图 8.7 所示。

图 8.7 调用“打开”对话框

运行第二段代码,调用“另存为”对话框,如图 8.8 所示。

344

第 8 章 使用用户界面

图 8.8 “另存为”对话框

6.程序分析

用 户 可 以 在 网 址 http://msdn.microsoft.com/office/tool/ribbon 中 下 载 文 件

2007OfficeControlIDsExcel2007.EXE,该文件包括了 Office 2007 各组件的控件列表。将该 文件解压后可以看到一个名为 ExcelRibbonControls.xlsx 的文件,其中包含了 Excel 2007 各 控件的 idMso。

8.2 创建自定义窗体

在前面小节中,用户已经了解了如何调用和使用 Excel 的内置对话框,在本小节中, 将详细讲解如何创建自定义窗体。在 Excel VBA 中,用户可以根据实际开发的需要,创建 自定义窗体。

案例 157 插入窗体

1.功能说明

插入窗体是用户创建自定义窗体的主要方法,在本小节中,将演示如何插入窗体。

2.语法说明

本例中介绍插入窗体的方法,其插入方法和前面章节中介绍的插入模块和过程类似。 主要是为了演示常见的插入方法。

345

Excel VBA 语法词典

3.案例说明

在本例中,将主要演示如何在 VBE 中插入自定义的窗体。

4.编写代码

在 Excel VBA 中,插入窗体的常见步骤如下: (1)进入 VBE 环境,然后选择“插入”|“用户窗体”选项,如图 8.9 所示。

图 8.9 选择插入窗体

(2)当用户选择对应的选项后,系统会显示出默认的用户窗体,如图 8.10 所示。

图 8.10 插入默认的用户窗体

(3)按 F5 键,调试程序代码,得到的空白窗体如图 8.11 所示。

346

第 8 章 使用用户界面

图 8.11 插入的空白窗体

5.运行结果

本例的主要功能是向 Excel 中插入空的窗体,最后运行的结果如图 8.12 所示。

图 8.12 插入的窗体

6.程序分析

从上面的结果中,用户可以看到关于窗体的默认属性。例如,系统插入的窗体自动命

名为“UserForm1”,并同时显示控件工具箱以及属性工具箱。

案例 158 删除窗体

1.功能说明

窗体是 Excel 的一种对象,当窗体中的数据无效时,用户需要删除窗体。

2.语法说明

由于用户窗体中一般包含着多种数据信息,因此在用户删除窗体的时候,系统会提示 是否导出该窗体,如果用户想彻底删除窗体,则选择不导出。

3.案例说明

当窗体不再需要时,可将窗体从工程中移除。本例将主要介绍如何删除 Excel 文件中 已有的窗体。

347

Excel VBA 语法词典

4.编写代码

在 Excel VBA 中,删除窗体的常见步骤如下: (1)在工程资源管理器中,选中需要删除的窗体对象 UserForm1。选中的窗体对象上, 单击鼠标右键,在弹出的快捷菜单中选择“移除 UserForm1”选项,如图 8.13 所示。

图 8.13 选择移除窗体

(2)系统弹出如图 8.14 所示的对话框,单击“否”按钮,直接删除窗体。

图 8.14 移除窗口提示

5.运行结果

本例的主要功能是将 Excel 的窗体删除,最后运行的结果如图 8.15 所示。

348

第 8 章 使用用户界面

图 8.15 删除窗体

6.程序分析

移除窗口提示中所使用的 UserForm1 是窗体的名称,选择移除不同的窗体对象时,其

取值会有所不同。例如,用户这定了名称为“MyForm”,则显示的是“移除 MyForm”选 项。

案例 159 导入窗体

1.功能说明

和其他对象类似,用户可以在开发过程中,向 VBE 中导入类似功能的窗体。

2.语法说明

当用户导出窗体进行保存后,在后续的开发中需要使用类似窗体时,就可以直接导出 该窗体。

3.案例说明

在实际开发过程中,用户可能需要创建各种类似的窗体。因此,为了节省创建窗体的 时间,用户可以选择导入之前已经保存的窗体文件。本例将主要介绍如何导入窗体。

4.编写代码

在 Excel VBA 中,导入窗体的常见步骤如下: (1)进入 VBE 环境,然后选择“文件”|“导入文件”选项,如图 8.16 所示。

(2)在“导入文件”对话框中,选择导入的窗体文件,然后单击“打开”按钮,就

349

Excel VBA 语法词典

导入对应的窗体文件,如图 8.17 所示。

图 8.17 导入窗体文件

5.运行结果

图 8.16 选择导入文件

用户可以查看导入窗体的情况,如图 8.18 所示。

6.程序分析

图 8.18 查看导入的窗体

从上面的例子中,用户可以看出,尽管导入的窗体文件名是“UserForm2”,但是由于 原来的文件中不包含窗体,所以导入后,系统将窗体的名称设置为默认的“UserForm1”。

案例 160 显示窗体

1.功能说明

用户可以使用 VBA 代码来控制窗体的显示属性。

350

第 8 章 使用用户界面

2.语法说明

在 Excel VBA 中,用户可以使用 Show 方法显示 UserForm 对象。其语法表达式如下:

[object.]Show modal

? ? ? ? 其中参数的含义如下:

object:代表对象表达式,其值为“应用于”列表中的对象。如果省略掉 object,则把 与活动的 UserForm 模块相关联的 UserForm 当作 object。 modal:决定 UserForm is 是模态的还是无模式的。 其中 modal 的设置值如下: vbModal:数值是 1,表示 UserForm 是模态的。这是默认数值。 vbModeless:数值是 0,表示 UserForm 是无模式的。

3.案例说明

在程序开发的过程中,有时需要控制窗体的显示。并不是希望窗体任何时候都出现在 程序当前,例如,当某个事件触发的时候,才会显示窗体。本例将演示如何在程序中显示 窗体。

4.编写代码

本例的代码下:

Sub ShowForms() UserForm1.Show End Sub

5.运行结果

当用户运行在 Sub 过程中的代码时,得到的程序结果如图 8.19 所示。

图 8.19 运行代码得到的结果

6.程序分析

本例的代码十分简单,只是使用 Show 方法直接显示窗体。

351

Excel VBA 语法词典

案例 161 设置窗体背景图片

1.功能说明

默认的窗体背景为灰色背景,为了增加窗体的美观性,可以为窗体添加背景图片。

2.语法说明

通过使用窗体的 Picture 属性可以窗体添加背景图片,并可以设置对应的属性。

3.案例说明

本例中将演示如何设置窗体的背景图片。

4.编写代码

设置窗体背景图片的主要步骤如下。

(1)在工程资源管理器中选择窗体,在属性窗口中,选中“Picture”属性,单击其后 的 按钮,如图 8.20 所示。

(2)弹出“加载图片”窗口,在其中选取相应的图片,如图 8.21 所示。

图 8.20 设置图片属性

图 8.21 选择设置的图片

5.运行结果

单击对话框中的“打开”按钮,设置窗体的背景图片,如图 8.22 所示。

352

第 8 章 使用用户界面

6.程序分析

图 8.22 设置窗体的背景图片

如果加载的图片大小超过了窗体的实际大小,系统会将超出部分截掉。为了使加载的

图片全部显示出来,可对设置窗体的 PictureAlignment 属性和 PictureSizeMode 属性。

案例 162 加载窗体图片

1.功能说明

在实际开发工程中,当用户希望某些事件触发后,窗体的背景图片修改,此时用户需 要为窗体加载图片。

2.语法说明

除了可以在设计窗体时为窗体添加图片外,还可以在 VBA 程序中为窗体添加图片。 此时需要使用 LoadPicture 函数,其返回值为一个 Picture 对象,使用方法如下所述,其中 的参数 filename 用于指明图片文件所在的路径和文件名。

LoadPicture(filename)

同时,为了设置加载图片的位置,需要使用 PictureAlignment 属性。该属性用来指定 一个背景图片的位置。其语法表达式如下:

object.PictureAlignment [= fmPictureAlignment]

参数说明如下:

? object:表示有效对象。

? fmPictureAlignment:表示图片与控件对齐的位置。fmPictureAlignment 的具体取值如

表 8.1 所示。

表 8.1 fmPictureAlignment的取值

常量 fmPictureAlignmentTopLeft fmPictureAlignmentTopRight fmPictureAlignmentCenter fmPictureAlignmentBottomLeft fmPictureAlignmentBottomRight 值 0 1 2 3 4 说明 左上角 右上角 中心 左下角 右下角 同时,为了设置窗体中图片的显示方式,还需要设置 PictureSizeMode 属性。该属性 的主要功能是指定在控件、窗体或页面上显示背景图片的方式。其语法表达式如下:

object.PictureSizeMode [= fmPictureSizeMode]

参数 fmPictureSizeMode 表示当图片与包含它的窗体或页面大小不等时,应执行的操 作。其具体取值如表 8.2 所示。

表 8.2

fmPictureSizeMode的取值 值 说明 353

常量

Excel VBA 语法词典

fmPictureSizeModeClip fmPictureSizeModeStretch fmPictureSizeModeZoom 0 1 3 裁掉图片中比窗体或页面大的部分(默 认)。 扩展图片使其填满窗体或页面。该设置值 使图片在垂直和水平方向都发生变形。 放大图片,但图片在水平和垂直方向上都 不变形 3.案例说明

本例中,首先显示的是一个空白窗体,如图 8.23 所示。然后在事件触发后,加载不同 的图片。

图 8.23 默认的窗体

4.编写代码

本例的主要代码如下:

Private Sub UserForm_Click()

With Me

.Picture = LoadPicture(\

.PictureAlignment = fmPictureAlignmentCenter .PictureSizeMode = fmPictureSizeModeZoom End With End Sub

5.运行结果

当用户单击窗口后,系统自动加载图片,结果如图 8.24 所示。

354

第 8 章 使用用户界面

图 8.24 运行结果

6.程序分析

LoadPicture 方法只能识别位图文件(.bmp)、图标文件(.ico)、行程编码文件、(.rle)

图元文件(.wmf)、增强型图元文件(.emf)、Gif 文件(.gif)、JPG 文件(.jpg)。

案例 163 创建 Splash 窗体

1.功能说明

所谓 Splash 窗口,就是主界面出现之前先出现的欢迎窗口。本例将需要创建一个带有 图片的 Splash 窗口。

2.语法说明

在 Excel VBA 中,窗体在显示之前,必须装载到内存中。如果显示一个没有装载的窗 体,该窗体将自动装载。如果想初始化窗体,而不显示窗体的话,可以使用如下方式装载。

Load frmSplash

窗体装载和卸载的顺序是:装载—显示—??—隐藏—卸载。卸载会清除窗体模块中 的所有的变量——类似于停止了一个过程。用户已经输入的任何数值都将丢失,控件将恢

复为在属性窗口中输入的缺省值。如果想保存它们的值,需要在卸载窗体前进行保存。

在 Excel VBA 中,用户窗体可以在两种“模式”之间显示,即模式或者无模式。模式 窗体,是指窗体显示时,用户只能在窗体中进行操作,不允许用户在 Excel 中进行其他的 操作。而无模式窗体,则是在该窗体显示时,还允许用户在 Excel 中进行其他操作,再回 到该窗体中来进行操作。

3.案例说明

在本例中,创建一个带有图片的 Splash 窗体。

4.编写代码

本例制作 Splash 窗体的步骤如下:

355

Excel VBA 语法词典

(1)在 VBE 中插入一个用户窗体,并向窗体中增加一个图像控件,如图 8.25 所示。

图 8.25 添加窗体对象

( 2 )双击窗本打开代码窗口,在窗体的 Activate 事件中编写代码, 设置调用 CloseUserForm 函数的时间间隔(该函数用来关闭 Splash 窗体)。具体代码如下:

Private Sub UserForm_Activate()

Application.OnTime Now + TimeValue(\End Sub

(3)在工程中插入一个模块,在模块中编写函数 CloseUserForm,用来卸载窗体,具 体代码如下:

Sub CloseUserForm() Unload UserForm1 End Sub

(4 )为了使工作簿一打开就自动打开 Splash 窗体,在“工程” 子窗体中双击 “ThisWorkbook”打开代码窗口,给 Workbook 对象的 Open 事件编写代码如下:

Private Sub Workbook_Open()

UserForm1.Show End Sub

5.运行结果

保存工作薄后,打开工作薄,查看添加的窗体情况,如图 8.26 所示。

356

第 8 章 使用用户界面

的任务。例如,如果用户尚未在任何一个 UserForm 中保存新数据,则应用程序可以提示

用户保存。

3.案例说明

在本例中,首先在窗体中添加标签控件,用户只能单击标签退出窗体。而不能使用窗 体中的关闭按钮。

4.编写代码

(1)窗体的初始化代码如下:

Private Sub UserForm_Initialize() Me.Caption = \禁用窗口关闭按钮\End Sub

(2)标签控件的单击事件代码如下:

Private Sub Label1_Click() Unload Me End Sub

(3)单击关闭按钮之前的事件代码如下:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then

MsgBox \请单击窗体指定位置,关闭窗口!\禁用关闭按钮\Cancel = True End If End Sub

5.运行结果

其中,默认的窗体如图 8.43 所示。当用户单击窗口的关闭按钮后,系统显示的提示信 息如图 8.44 所示。

图 8.43 默认窗体

图 8.44 系统的提示信息

当用户单击窗口中的标签时,窗体关闭,如图 8.45 所示。

367

Excel VBA 语法词典

图 8.45 关闭窗体

6.程序分析

在 Excel VBA 中,加载窗体需要使用 Load 语句,此语句仅是将窗体加载到内存,并

不将窗体显示出来,其使用方法如下所示,窗体名是使用 Dim 声明窗体变量时所使用的窗 体名,加载窗体后如果不卸载窗体,其将一直保存在内存中。

Load 窗体名

368

本文来源:https://www.bwwdw.com/article/n3jd.html

Top