1、Excel_VBA 编程 常用实例(150 例) 主要内容和 特点 ExcelVBA 编程入门范例主要是以一些基础而简短的 VBA 实 例来对 ExcelV BA 中的常 用对象及其属性和方法进行讲解, 包括应用程序对象、 窗口、 工作簿、 工作表、 单元格和单元格区域、 图表、 数据透视表、 形状、 控件、 菜 单和工具栏、 帮助助手、 格式化操作、 文件操作、 以及常用方法和函数及技巧等方面的应用示 例。 这些例子都比较基础, 很容易理解, 因而, 很容易调试并得以实现, 让您 通 过具体的实例来熟悉 ExcelVBA 编 程。 分 16 章共 14 个专题,以具体实例来对大多数常用的 E
2、xcelVBA 对象进行讲 解; 一般而言,每个实例都很简短,用来说明使用 VBA 实现 Excel 某 一功能的操 作; 各章内容主要是实例,即 VBA 代码,配以简短的说明,有些例子可能配以必 要的图片,以便于理解; 您可以对这些实例进行扩充或组合,以实现您想要的功能或更复杂的操作。 VBE 编辑 器及 VBA 代码输入和 调试的基本 知识 在学习这些实例的过程中, 最好自已动手将它们输入到 VBE 编辑器 中调试运行, 来查看它们的结果。当然,您可以偷赖,将它们复制/ 粘贴到代码编辑窗口后, 进行调试运行。 下面, 对 VBE 编 辑器界面进行介绍, 并对 VBA 代 码输入和调试 的基
3、本知识进行简单的讲解。 激活 VBE 编辑器 一般可以使用以下三种方式来打开 VBE 编 辑器: 使用工作表菜单“ 工具宏Visual Basic 编辑器” 命令, 如图 00-01 所示; 在Visual Basic 工 具栏上,按“Visual Basic 编辑器” 按钮,如图 00-02 所示; 按 Alt+F11 组合键。 1 图 00-01: 选择菜单“ 工具宏Visual Basic 编 辑器” 命令来打开 VBE 编辑 器 图 00-02:选择Visual Basic 工 具栏上的“Visual Basic 编辑器” 命令按钮来打开 VBE 编辑 器 此外,您也可以使用下面三种方
4、式打开 VBE 编辑器: 在任 一工作表标签上单击鼠标右键, 在弹出的菜单中选择“ 查看代码”,则 可 进入 VBE 编辑器访问该工作表的代码模块,如图 00-03 所示; 在工 作簿窗口左上角的 Excel 图标上单 击鼠标右键,在弹出的菜单中选择 “ 查看代码” ,则可进入 VBE 编 辑器访问活动工作簿的 ThisWorkbook 代码 模块, 如图 00-04 所示; 选择 菜单“ 工具宏宏” 命令打开宏对话框,若该工作簿中有宏程序, 则单击该对话框中的“ 编辑” 按钮即可进行 VBE 编辑器 代码模块,如图 00-05 所 示。 2 图 00-03:右击工作表标签弹出菜单并选择“ 查
5、看代码” 打开 VBE 编辑器 图 00-04:右击 Excel 图标弹出菜单并选择“ 查看代码” 打开 VBE 编辑器 图 00-05:在宏对话框中单击“ 编辑” 按钮打开 VBE 编 辑器 VBE 编辑 器窗口简介 刚打开 VBE 编辑器时, 所显示的窗口如图 00-06 所示, 其中没有代码模块窗口。 3 图 00-06:刚打开 VBE 编辑器时的窗口 可以在“ 工程资源管理器” 中双击任一对象打开代码窗口, 或者选择菜单“ 插入 模块” 或“插入类模块” 来打开代码窗口。一般 VBE 编辑器窗口及各组成部件 名称如图 00-07 所示, 可以通过“ 视图” 菜单中的菜单项选择所出现的窗
6、口。 同时, 可以在“ 工程属性” 窗口中设置或修改相应对象的属性。 4 图 00-07:VBE 编辑 器窗口 下面是带有用户窗体的 VBE 编 辑器窗口,如图 00-08 所示。选择 VBE 菜单“ 插 入用户窗体” , 即可插入一个用户窗体。 当插入用户窗体后, 在“ 工程资源管5 理器” 窗口中会出现一个用户窗体对象, “ 工程 属性” 窗口显示当前用户窗体的属性, 可对相关属性进行设置或修改。同时,在用户窗体上用鼠标单击,会出现“ 控件 工具箱” 。在“ 工程资源管理器”窗 口双击用户窗体图标,会出现相应的用户窗体; 在用户窗体图标或者是在用户窗体上单击鼠标右键,然后在弹出的菜单中选择
7、 “ 查看代码” ,则会出现用户窗体代码窗口。 图 00-08:VBE 编辑 器窗口( 带有用户窗体) 在 VBE 编 辑器中输 入 VBA 代码 6 如前所述, 您可以选择 VBE 菜单“ 插入用户窗体/ 模块/类 模块” 来插入模块或 用户窗体以及相应的代码窗口。 此外, 您也可以在“ 工程资源管理器” 中单击鼠标 右键, 从弹出的菜单中选择“ 插入用户窗体/ 模块/类模 块” 来实现上面的操作。 在获取相应的代码模块窗口后,就可以输入 VBA 代码了 。 在 VBE 编 辑器的代码模块中输入 VBA 代 码,通常有以下几种方法: 手工键盘输入; 使用宏录制器, 即选择菜单“ 工具宏录制新
8、宏” 命令, 将 所进行的操作 自动录制成宏代码; 复制/ 粘 贴代码,即将现有的代码复制后,粘贴到相应的代码模块中; 导入代码模块,即在 VBE 编 辑器中选择菜单“ 文件导入文件” 或在“工程 资 源管理器” 的任一对象上右击鼠标选择菜单“ 导入文件” , 选择相应的代码文件导入。 如果不想要某个模块了, 可以选择菜单“ 文件移除模块” , 也可以在相应的模 块上单击鼠标右键, 从弹出的菜单中选择“ 移除模块” 。 此时, 会弹出一个警告框, 询问在移除模块前是否将其导出,可以根据需要进行选择。 也可以选择菜单“ 文件导出文件” 或在相应的模块上单击鼠标右键后, 从弹出 的菜单中选择“ 导
9、出文件” , 将移除的模块保存在相应的文件夹中。 这样, 以后可 以对其进行导入,从而加以利用。 调试 VBA 代码 在 VBE 编 辑器的菜单中,有两项与调试运行有关的菜单项,即“ 调试” 菜单和“ 运 行” 菜单,它们提供了各种调试和运行的手段。在我现阶段进行代码调试时,常 用到的有以下几个: 逐语句。 可以按 F8 键对代码按顺序一条一条语句运行, 从而找出语句或逻辑 错误。 设置断点。在可能存在问题的语句处设置断点( 可通过在相应代码前的空白部 位单击,将会出现一个深红色的椭圆即断点) ,当程序运行至断点处时,会中止 运行。 在语句的适当部位设置 Debug.Print 语句,运行后其
10、结果会显示在“ 立即窗口” 中,可以此测试或跟踪变量的值。 在“ 立即 窗口” 中测试。对值的测试或跟踪,也可以以“ ?” 开头, 在“ 立即窗口” 中输入需要测试值的语句, 按 Enter 回车键后将立即出现结果; 对执行语句的测 试,可直接在“ 立即窗口” 中输入,按 Enter 回车键后将执行。 可以按 F5 键直接运行光标所在位置的子程序。 在执行程序后,必须在 Excel 工 作表中查看所得到的结果。可以用鼠标单击 VB E 编辑器左上角的 Excel 图标或者 是按 Alt+F11 组合键切换到 Excel 界面。 ( 当然, 对程序代码的调试有很多方法和技巧, 留待以后对 VBA
11、 进 一步研究和理 解更透彻后一并讨论。) 利用 VBA 帮助系统 如果遇到疑问或错误,可以利用 Excel 自带 的 VBA 帮 助系统。 可以在如图 00-09 所示的部位输入需要帮助的关键词, 按 Enter 回车键后将会 出现相关主题。用鼠标单击相应的主题即会出现详细的帮助信息。 图 00-09:帮助搜索窗口 可以按 F2 键,调出“ 对象浏览器” 窗口(如图 00-10 所示) ,在搜索文本框中输 入需要帮助的关键词, 将会在“ 搜索结果” 中出现一系列相关的对象及方法、 属性7 列表,单击相应的对象则会在“ 类” 和“ 成员” 列 表框中显示相应的对象和方法、属 性成员列表, 在成
12、员列 表中相应的项目上按 F1 键即会出现详细的帮助信息。 (“ 对 象浏览器” 是一个很好的帮助工具,值得好好研究) 图 00-10:对象浏览器窗口 参考资料 ExcelVBA 编程入门范例参考或引用了以下书籍和资料: (1)Excel 2003 高级 VBA 编程宝 典 8 (2)Excel 2003 与 VBA 编程从入门到精通( 中文版) (3) 巧学巧 用Excel 2003 VBA 与宏( 中文版) (4)ExcelVBA 应用程序专业设计实用指南 (5)ExcelVBA 应用开发与实例精讲 (6) 一些网 上资源 更多的信息 关于 ExcelVBA 的更 多参考和学习资源,可以在
13、 上查找, 有疑问也可以在 ExcelHome 论坛中提问。您也可以登录我的博客 http:/fanjy.bl ,上 面有很多 Excel 的学习资料。同时,欢迎与我联系交流, 我的 e-mail 是: 。 “ 学习 Excel ,使用 VBA 对 Excel 进行控制操作是我很热衷的业余爱好之一。” fanjy 第一章 Excel 应用程序对象(Application 对象)及其 常用方法 基本操作应 用示例 分类:ExcelVBAExcelVBA 编程 入门范例 Application 对象代表整个 Microsoft Excel 应用程序,带有 175 个属性和 52 个 方法,可以
14、设置整个应用程序的环境或配置应用程序。 示例 01-01:体验开/ 关屏幕更新(ScreenUpdating 属性) Sub 关闭 屏幕更新() MsgBox “顺序切换 工作表 Sheet1Sheet2Sheet3Sheet2 ,先开启屏 幕 更新,然后关闭屏幕更新“ Worksheets(1).Select MsgBox “ 目前屏幕中显示工作表 Sheet1“ Application.ScreenUpdating = True Worksheets(2).Select MsgBox “ 显示 Sheet2 了吗?“ Worksheets(3).Select MsgBox “ 显示 She
15、et3 了吗?“ Worksheets(2).Select MsgBox “ 下面与前面执行的程序代码相同, 但关闭屏幕更新功能“ Worksheets(1).Select MsgBox “ 目前屏幕中显示工作表Sheet1“ & Chr(10) & “ 关屏屏幕更新功能“ Application.ScreenUpdating = False Worksheets(2).Select 9 MsgBox “ 显示 Sheet2 了吗?“ Worksheets(3).Select MsgBox “ 显示 Sheet3 了吗?“ Worksheets(2).Select Application.Sc
16、reenUpdating = True End Sub 示例说明:ScreenUpdating 属性 用来控制屏幕更新。当运行一个宏程序处理涉 及到多个工作表或单元格中的大量数据时, 若没有关闭屏幕更新, 则会占用 CP U 的处理时间, 从而降低程序的运行速度, 而关闭该属性则可显著提高程序运行 速度。 示例 01-02:使用状态 栏(StatusBar 属性) Sub testStatusBar() Application.DisplayStatusBar = True 开启状态栏显示 赋值状态栏显示的文本 Application.StatusBar = “http:/“ End Sub
17、示例说明:StatusBar 属性用来指定显示在状态栏上的信息。 若不想再显示状态 栏文本, 可使用Application.StatusBar = False 语句关闭状态栏显示, 也可以在 程序开始将原先的状态栏设置存储, 如使用语句oldStatusBar = Application.Di splayStatusBar 将状态栏原来的信息存储在变量 oldStatusBar , 在程序运行完成 或退出时, 将变量重新赋值给状态栏, 如使用语句 Application.DisplayStatusBa r = oldStatusBar ,以恢复状态栏原状。 示例 01-03:处理光标(Curs
18、or 属性) Sub ViewCursors() Application.Cursor = xlNorthwestArrow MsgBox “ 您将使用箭头光标, 切换到 Excel 界面查看 光标形状“ Application.Cursor = xlIBeam MsgBox “ 您将使用工形光标, 切换到 Excel 界面查看 光标形状“ Application.Cursor = xlWait MsgBox “ 您将使用等待形光标, 切换到 Excel 界面查 看光标形状“ Application.Cursor = xlDefault MsgBox “ 您已将光标恢复为缺省状态“ End S
19、ub 示例 01-04:获取系统 信息 Sub GetSystemInfo() MsgBox “Excel 版本 信息为:“ & Application.CalculationVersion MsgBox “Excel 当前 允许使用的内存为:“ & Application.MemoryFree MsgBox “Excel 当前 已使用的内存为:“ & Application.MemoryUsed MsgBox “Excel 可以 使用的内存为:“ & Application.MemoryTotal MsgBox “ 本机操作系统的名称和版本为:“ & Application.Operatin
20、gSystem MsgBox “ 本产品所登记的组织名为:“ & Application.OrganizationName 10 MsgBox “ 当前用户名为:“ & Application.UserName MsgBox “ 当前使用的 Excel 版 本为:“ & Application.Version End Sub 示例说明:可以使用给 UserName 属性赋值以设置用户名称。 示例 01-05:退出复制/剪切模式(CutCopyMode 属性) Sub exitCutCopyMode() Application.CutCopyMode = False End Sub 示例说明:退
21、出复制/ 剪切模式后,在程序运行时所进行的复制或剪切操作不会 在原单元格区域留下流动的虚框线。 需要提醒的是, 在程序运行完后, 应使用 A pplication.CutCopyMode = False 语句恢复该属性的默认设置。 示例 01-06:禁止弹出 警告信息(DisplayAlerts 属性) Sub testAlertsDisplay() Application.DisplayAlerts = False End Sub 示例说明: 在程序运行过程中, 有时由于 Excel 本身设置 的原因, 会弹出对话框, 从而中 断程 序的运 行, 您可以 在程 序之前 加 上 Applica
22、tion.DisplayAlerts = Fal se 语句 以 禁止弹出 这 些对话框 而 不影响程序 正常运行。 需要注意的 是,在程序 运行结束前, 应使 DisplayAlerts 属性恢复为缺省状态, 即使用语句 Application. DisplayAlerts = True 。 该属性的默认设置为 True , 当将该属性设置为 False 时, Excel 会使 直接使用对话框中默认的选择, 从而不会因为弹出对话框而影响程序 运行。 示例 01-07:将 Excel 全屏幕显 示 Sub testFullScreen() MsgBox “ 运行后将 Excel 的显 示模式设
23、置为全屏幕“ Application.DisplayFullScreen = True MsgBox “ 恢复为原来的状态“ Application.DisplayFullScreen = False End Sub 示例 01-08:Excel 启 动的文件夹路径 Sub ExcelStartfolder() MsgBox “Excel 启动 的文件夹路径为:“ & Chr(10) & Application.StartupPa th End Sub 示例 01-09:打开最近 使用过的文 档 Sub OpenRecentFiles() MsgBox “ 显示最近使用过的第三个文件名, 并打
24、开该文件“ MsgBox “ 最近 使用 的第三 个文 件的名 称为:“ & Application.RecentFiles(3).N ame Application.RecentFiles(3).Open 11 End Sub 示例 01-10:打开文件(FindFile 方法) Sub FindFileOpen() On Error Resume Next MsgBox “ 请打开文件“, vbOKOnly + vbInformation, “ 打开文件“ If Not Application.FindFile Then MsgBox “ 文件未找到“, vbOKOnly + vbInfo
25、rmation, “ 打开失败“ End If End Sub 示例说明: 本示例将显示“ 打开” 文 件对话框, 若用户未打开文件( 即点击“ 取消” 按 钮) , 则会显示“ 打开失败” 信息框。 示例中使用了 FindFile 方法 , 用来显示“ 打开” 对话框 并让 用户打 开一 个文件 。如 果成功 打开 一个新 文件 ,则该 值 为 True 。如 果用户取消了操作并退出该对话框,则该值为 False。 示例 01-11 :文件对话 框操作(FileDialog 属性) Sub UseFileDialogOpen() Dim lngCount As Long 开启“打开文件“对话
26、框 With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = True .Show 显示所 选的每个文件的路径 For lngCount = 1 To .SelectedItems.Count MsgBox .SelectedItems(lngCount) Next lngCount End With End Sub 示例说明: 本示例显示“ 打开文件” 对话框, 当用户在其中选择一个或多个文件后, 将依次显示每个文件的路径。 其中,FileDialog 属性返回打开和保存对话框中一 系列对象的集合, 您可以对该集合对
27、象的属性进行进一步的设置, 如上例中的 A llowMultiSelect 属性设置为 True 将允许用户选择多个文件。 示例 01-12:保存 Excel 的工作环 境 Sub 保存 Excel 的工 作环境() MsgBox “ 将 Excel 的工作环境保存到 D:ExcelSample 中“ Application.SaveWorkspace “D:ExcelSampleSample“ End Sub 示例说明: 运行本程序后, 将工作簿以带后缀名.xlw 保存 到 D 盘的 ExcelSampl e 文件夹中,生成的文件全 名为 Sample.xlw。当改变工作簿并保存时 ,Exc
28、el 会询问是覆盖原文件还是保存副本。 示例 01-13:改变 Excel 工作簿名 字(Caption 属性) Sub SetCaption() 12 Application.Caption = “My ExcelBook“ End Sub 示例说明:运行本程序后,将工作簿左上角 Excel 图标右 侧的“Microsoft Excel” 改为“My ExcelBook” 。 示例 01-14:使用 InputBox 方法 Sub SampleInputBox() Dim vInput vInput = InputBox(“ 请输入用户名:“, “ 获取 用户名“, Application.
29、UserName) MsgBox “ 您好!“ & vInput & “. 很高兴能认识您.“, vbOKOnly, “ 打招呼“ End Sub 示例 01-15:设置页边 距(CentimetersToPoints 方法) Sub SetLeftMargin() MsgBox “ 将工作表 Sheet1 的 左页边距设为 5 厘米“ Worksheets(“Sheet1“).PageSetup.LeftMargin = Application.CentimetersTo Points(5) End Sub 示例 01-16:使用 Windows 的计 算器(ActivateMicrosof
30、tApp 方法) Sub CallCalculate() Application.ActivateMicrosoftApp Index:=0 End Sub 示例说明:运行本程序后,将调用 Windows 的计算器。 示例 01-17:在程序中 运行另一个 宏(Run 方法) Sub runOtherMacro() MsgBox “ 本程序先选择 A1 至 C6 单元格 区域后执行 DrawLine 宏“ ActiveSheet.Range(“A2:C6“).Select Application.Run “DrawLine“ End Sub 示例 01-18:在指定的 时间执行宏(OnTime
31、 方法) Sub AfterTimetoRun() MsgBox “ 从现在开始,10 秒后执行程序testFullScreen“ Application.OnTime Now + TimeValue(“00:00:10“), “testFullScreen“ End Sub 示例说明:运行本程序后,在 10 秒后将执行程序 testFullScreen。 示例 01-19:暂时停止 宏运行(Wait 方法) Sub Stop5sMacroRun() Dim SetTime As Date MsgBox “ 按下确定,5 秒后执行程序testFullScreen“ SetTime = Date
32、Add(“s“, 5, Now() 13 Application.Wait SetTime Call testFullScreen End Sub 示例说明: 运行本程序后, 按下弹出的提示框中的“ 确定” 按钮, 等待 5 秒后执 行 另一程序 testFullScreen。 示例 01-20:按下指定 的按键后执 行程序(OnKey 方法) 示例 01-20-1 Sub PressKeytoRun() MsgBox “ 按下 Ctrl+D 后将执行程序testFullScreen “ Application.OnKey “d“, “testFullScreen“ End Sub 示例 01
33、-20-2 Sub ResetKey() MsgBox “ 恢复原来的按键状态“ Application.OnKey “d“ End Sub 示例说明:Onkey 方 法的作用主 要是指定特 定的键,当 按下指定的 键时运行 相 应的宏程序,或者按下指定的键时,使 Excel 屏蔽特定的功能。 示例 01-21:重新计算 工作簿 示例 01-21-1 Sub CalculateAllWorkbook() Application.Calculate End Sub 示例说明: 当工作簿的计算模式被设置为手动模式后, 运用 Calculate 方法可以 重新计算所有打开的工作簿、 工作簿中特定的工
34、作表或者工作表中指定的单元格 区域。 示例 01-21-2 Sub CalculateFullSample() If Application.CalculationVersion Workbooks(1).CalculationVersion The n Application.CalculateFull End If End Sub 示例说明:本示例先将当前 Microsoft Excel 的版本与上次计算该工作簿的 Exc el 版本进行 比较, 如果两个版本不同, 则对所有打开工作簿中的数据进行一次完 整计算。其中,CalculationVersion 属性返回工作簿的版本信息。 示例
35、01-22:控制函数 重新计算(Volatile 方法) Function NonStaticRand() 当工作表中任意单元格重新计算时本函数更新 Application.Volatile True NonStaticRand = Rnd() 14 End Function 示例说明:本示例摸仿 Excel 中的 Rand() 函数,当工作表单元格发生变化时, 都会重新计算该函数。 在例子中, 使用了 Volatile 方法, 强制函数进行重新计算, 即无论何时重新计算工作表,该函数都会重新计算。 示例 01-23:利用工作 表函数(WorksheetFunction 属性) Sub Wor
36、ksheetFunctionSample() Dim myRange As Range, answer Set myRange = Worksheets(“Sheet1“).Range(“A1:C10“) answer = Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub 示例说明:本示例获取工作表 Sheet1 中单元格区域 A1:C10 中的最 小值,使用 了工作表函数 Min()。 一般, 使用 WorksheetFunction 属性引用工作表函数, 但 如果 VBA 自带有实现相同功能的函数,则直接使用该
37、函数,否则会出现错误。 示例 01-24:获取重叠 区域(Intersect 方法) Sub IntersectRange() Dim rSect As Range Worksheets(“Sheet1“).Activate Set rSect = Application.Intersect(Range(“rg1“), Range(“rg2“) If rSect Is Nothing Then MsgBox “ 没有交叉区域“ Else rSect.Select End If End Sub 示例说明: 本示例在工作表 Sheet1 中选定两个命名区域 rg1 和 rg2 的重叠区域, 如果所
38、选区域不重叠, 则显示一条相应的信息。 其中, Intersect 方法返回一个 R ange 对象 ,代表两个或多个范围重叠的矩形区域。 示例 01-25:获取路径 分隔符(PathSeparator 属性) Sub GetPathSeparator() MsgBox “ 路径分隔符为“ & Application.PathSeparator End Sub 示例说明:本示例使用 PathSeparator 属性 返回路径分隔符(“”)。 示例 01-26:快速移至 指定位置(Goto 方法) Sub GotoSample() Application.Goto Reference:=Work
39、sheets(“Sheet1“).Range(“A154“), _ scroll:=True End Sub 示例说明: 本示例运行后, 将当前单元格移至工作表 Sheet1 中的单元格 A154 。15 示例 01-27:显示内置 对话框(Dialogs 属性) Sub DialogSample() Application.Dialogs(xlDialogOpen).Show End Sub 示例说明:本示例显示 Excel 的“ 打开” 文 件对话框。其中,Dialogs 属性返 回的 集合代表所有的 Excel 内置对话框。 示例 01-28:退出 Excel(SendKeys 方法)
40、Sub SendKeysSample() Application.SendKeys (“%fx“) End Sub 示例说明: 本示例使用 SendKeys 方法退出 Excel , 若未保存, 则会弹出提示对 话框并让用户作出相应的选择。SendKeys 方法的作用是摸拟键盘输入, 如例中 的“%fx”表示在 Excel 中同时按下 Alt 、F 和 X 三个键。 示例 01-29:关闭 Excel Sub 关闭 Excel() MsgBox “Excel 将会 关闭“ Application.Quit End Sub 示例说明 : 运行本程 序 后,若该 工 作簿未保 存 ,则会弹 出 对
41、话框询 问 是否保存。= (by fanjy) 第二章 窗口(Window 对象)基 本操作应用 示例( 一) 分类:ExcelVBAExcelVBA 编程 入门范例 Window 对 象代表一个窗口, 约有 48 个属性和 14 个方法, 能对窗口特性进行设 置和操作。 Window 对 象是 Windows 集合中 的成员, 对于 Application 对象来 说, Windows 集合包含该应用程序中的所有窗口;对于 Workbook 对象来说,Wind ows 集合只 包含指定工作簿中的窗口。下面介绍一些示例,以演示和说明 Wind ow 对象及 其属性和方法的运用。 示例 02-0
42、1:激活窗口(Activate 方法) Sub SelectWindow() Dim iWin As Long, i As Long, bWin MsgBox “ 依次切换已打开的窗口“ iWin = Windows.Count 16 MsgBox “ 您已打开的窗口数量为: ” & iWin For i = 1 To iWin Windows(i).Activate bWin = MsgBox(“ 您激活了第 “ & i & “ 个窗口, 还要继续吗?“, vbYesNo) If bWin = vbNo Then Exit Sub Next i End Sub 示例 02-02:窗口状态(W
43、indowState 属性) 示例 02-02-01 Sub WindowStateTest() MsgBox “ 当前活动工作簿窗口将最小化“ Windows(1).WindowState = xlMinimized MsgBox “ 当前活动工作簿窗口将恢复正常“ Windows(1).WindowState = xlNormal MsgBox “ 当前活动工作簿窗口将最大化“ Windows(1).WindowState = xlMaximized End Sub 示例说明:使用 WindowState 属性可以返回或者设置窗口的状态。示例中,常 量 xlMinimized 、xlNor
44、mal 和 xlMaximized 分别代表窗口不同状态值,Windows (1) 表示当 前活动窗口。可以使用 Windows(index) 来返回单个的 Window 对象 , 其中的 index 为窗口 的名称或编号,活动窗口总是 Windows(1) 。 示例 02-02-02 Sub testWindow() 测试 Excel 应用程序 窗口状态 MsgBox “ 应用程序窗口将最大化“ Application.WindowState = xlMaximized Call testWindowState MsgBox “ 应用程序窗口将恢复正常“ Application.Window
45、State = xlNormal MsgBox “ 应用程序窗口已恢复正常“ 测试活 动工作簿窗口状态 MsgBox “ 当前活动工作簿窗口将最小化“ ActiveWindow.WindowState = xlMinimized Call testWindowState MsgBox “ 当前活动工作簿窗口将最大化“ ActiveWindow.WindowState = xlMaximized Call testWindowState MsgBox “ 当前活动工作簿窗口将恢复正常“ ActiveWindow.WindowState = xlNormal Call testWindowStat
46、e MsgBox “ 应用程序窗口将最小化“ Application.WindowState = xlMinimized Call testWindowState 17 End Sub * Sub testWindowState() Select Case Application.WindowState Case xlMaximized: MsgBox “ 应用程序窗口已最大化“ Case xlMinimized: MsgBox “ 应用程序窗口已最小化“ Case xlNormal: Select Case ActiveWindow.WindowState Case xlMaximized:
47、 MsgBox “ 当前活 动工作簿窗口已最大化“ Case xlMinimized: MsgBox “ 当前活 动工作簿窗口已最小化“ Case xlNormal: MsgBox “ 当前活动工作簿窗口已恢复正常“ End Select End Select End Sub 示例说明: 本示例有两 个程序,其 中 testWindow() 是主 程序,调用 子程序 text WindowState() ,演示 了应用程序 窗口和工作 簿窗口的不 同状态。当 前活动窗口 一般代表当前活动工作簿窗口, 读 者可以在 VBE 编辑器 中按 F8 键逐语句运行 t estWindow() 程序,观
48、察 Excel 应 用程序及工作簿窗口的不同状态。此外,在子 程序中,还运用了嵌套的Select Case 结构 。 示例 02-02-03 Sub SheetGradualGrow() Dim x As Integer With ActiveWindow .WindowState = xlNormal .Top = 1 .Left = 1 .Height = 50 .Width = 50 For x = 50 To Application.UsableHeight .Height = x Next x For x = 50 To Application.UsableWidth .Width = x Next x .WindowState = xlMaximized End With End Sub 示例说明: 本示例将动态演示工作簿窗口由小到大直至最大化的变化过程。 在运 行程序时,您可以将 VBE 窗口缩小,从而在工作簿中查看动态效果,也可以在 Excel 中选 择菜单中的宏命令执行以查看效果。 示例 02-03:切换显示 工作表元素 示例 02-03-01 Sub testDisplayHeading() 18 MsgBox “ 切换显示/ 隐藏行列标号” ActiveWindow.DisplayHeadings = Not ActiveWindow.DisplayH