Excel VBA教程(九):Excel VBA How-To
本文探讨 Excel VBA 操作方法。请在编写Excel VBA 时参考。
这是上一篇文章的延续。
Excel VBA教程(八):Excel VBA语言基础——数据类型、数据结构
4.Excel VBA 操作方法
4.1.如何配置UI(用户界面)
在Excel VBA中,可以通过三种方式配置UI,例如从用户接收值或显示进度。
4.1.1.使用 Excel 工作表的 UI
这是最常用的方法。将按钮、文本框和复选框等控件添加到 Excel 工作表并处理事件。它是最容易实现且使用方便的,因为您可以在查看数据时单击按钮。
这种方法有一个缺点。如果在更改屏幕分辨率后单击按钮,按钮的尺寸会继续增大或文本的尺寸会减小。主要是当外部显示器更换或连接到光束投影仪时屏幕分辨率发生变化,并且此时包含该控件的 Excel 工作表打开时,会发生这种现象。使用ActiveX控件时会出现这种现象,而使用表单控件时则不会出现这种现象。
4.1.2.使用用户表单的 UI
这是一种通过创建单独的 UserForm 对象并向其添加控件来处理事件的方法。
它可能不适合在输入/修改数据(例如输入值列表)时工作,因为它可能会覆盖屏幕。如下图所示,适合显示ProgressBar等信息。
4.1.2.使用功能区栏的 UI
这是劳动强度最大、最复杂的方法。将自定义选项卡和按钮添加到自 Excel 2007 以来已更改的功能区栏界面,并处理事件。这是几年前一位初级员工制作并发送给我的定制丝带栏的示例。
数据标准检查工具(*注: 数据标准检查工具说明内容,下载)提供了Excel Sheet中的UI,但如果改成Ribbon bar UI,就会和上面类似。
功能区栏的内容本身就相当广泛,所以稍后我将在单独的文章中整理它。见下文。
- https://docs.microsoft.com/en-us/archive/msdn-magazine/2007/february/extend-office-2007-with-your-own-ribbon-tabs-and-controls
- https://docs.microsoft.com/en-us/office/vba/library-reference/concepts/overview-of-the-office-fluent-ribbon
4.2.如何运行VBA代码
至少有三种方法可以运行 VBA 代码。
4.2.1.触发按钮点击事件
这是如何创建一个如上图所示的按钮,并在按钮的单击事件中编写一条执行VBA代码的语句。这适用于提供在 UI 中运行它的方法。
4.2.2.将光标置于需要执行的源代码上,使用快捷键执行
将光标置于 VBE(Visual Basic 编辑器)中的 Sub 或 Function 过程代码上,然后按快捷键。 F5运行与您也可以单击工具栏上的运行按钮(▶️)。此方法仅适用于不带参数的 Sub 和 Function 过程。
该方法适合不需要外部提供执行方法时的简单测试。
4.2.3.在立即窗口中运行
该方法是在立即执行窗口中输入Sub或Function过程的名称和参数,然后按Enter键执行。该方法适合对带有参数的Sub和Function程序进行简单测试。
4.3.如何使用立即窗口工具
除了上面讨论的宏执行之外,立即执行窗口还可用于多种目的,例如调试和消息输出。
- 运行宏
- 通过输入模块中子或函数过程的名称来执行
- 带参数的程序也可以执行
- 在运行时检查变量值
- 在断点处停止时使用
- 打印或?输入变量名称后,按 Enter 键确认值。
- 检查输出消息
- 使用 Debug.Print 检查输出
4.4.如何使用对象浏览工具
上一篇 Excel VBA教程(三):Excel对象模型 我快速浏览了一下 中的对象浏览工具。
在 VBE“查看”菜单中执行“浏览对象”。快捷方式是 F2 是。
对象浏览工具由以下部分组成。
- 过滤和搜索
- 您可以检查 Excel 中默认提供的所有库以及已添加为引用的库的列表,并选择特定的库。
- 整个库列表可以通过类名或成员名进行搜索。
- 班级名单
- 显示所选库下所有类、模块和枚举的列表。
- 会员名单
- 显示作为类列表中选定的类或模块的成员的过程、函数、属性等的列表。
- 会员信息
- 显示从成员列表中选择的过程、函数、属性等的详细信息。
对象搜索工具中显示的图标类型及其含义如下。
有关对象浏览工具的更多信息,请参阅下面的 URL。
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/object-browser
4.5.如何提高 VBA 性能
如何提高VBA性能将在另一篇文章中写。
总结一下上面的文章,在进入要处理的代码之前将全局变量设置为一个性能提升值,在处理代码完成后将其更改为原始值。请参考以下代码。
'코드 진입 부분 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False Application.DisplayAlerts = False '실행할 코드가 들어 갈 부분 ... '코드 종료 부분 Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.DisplayAlerts = True
4.6.如何使用宏录制器
Excel的宏记录器非常有用。例如,如果您正在创建新的数据透视表、新图表,或者不知道如何在 VBA 代码中编写重复性任务,则宏记录器可以提供很大帮助。
如果启动宏记录器,使用键盘或鼠标处理任务,然后停止宏记录器,您可以看到到目前为止处理的工作的详细信息是用 VBA 代码编写的。通过修改和使用以这种方式创建的代码,与从头开始编写 VBA 代码相比,可以更快、更准确地进行编码。
单击“开发人员”选项卡或底部状态栏上的“录制宏”按钮即可开始宏录制,如下所示。
如果单击“录制宏”按钮,将出现一个输入宏名称、快捷键、保存位置和描述的窗口,如下所示。
如果输入宏信息后单击“确定”按钮,录制状态将发生如下更改。
让我们用宏记录器记录粘贴数据的边框指定、标题设置(背景颜色、字体、居中对齐)、网格线隐藏和冻结帧功能。如果启动宏录制并使用键盘或鼠标执行该功能,结果如下图右侧所示。
停止宏录制并检查生成的 VBA 代码,如下所示。
Sub 매크로1() ' ' 매크로1 매크로 ' Columns("A:B").Select Columns("A:B").EntireColumn.AutoFit Range("A1:B11").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With Range("A1:B1").Select Selection.Font.Bold = True With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A2").Select ActiveWindow.FreezePanes = True ActiveWindow.DisplayGridlines = False End Sub
分析这段代码:
即使您不熟悉 Excel 对象模型或 VBA 语法,也可以使用以这种方式创建的 VBA 代码创建有用的宏。如果你很好地使用宏记录器,VBA编码就会变得很容易。
作为参考,Excel 是 Ms-Office 套件中唯一的宏记录器。
4.7.编码时应遵循的基本原则
建议使用 Excel VBA 进行编码时遵循以下基本原则。
- 不要将更改的值放入内部,而是接收来自外部(UI)的输入。
- 不要从一开始就将其构建为模块/类,首先只关注实现的目的。
- 构建需要额外的时间,这不会影响原来的工作进度。
- VBA是手段(工具),而不是目的。小心不要翻身。
- 如果使用次数超过3次或者明确将来会继续使用,则考虑可重用性,将其重构并构造为Module/Class。 (制作 -> 复制 -> 重构)
在本文中,我们了解了在编写 Excel VBA 时需要了解的操作方法。接下来,我们将了解使用 Excel VBA 开发和使用的工具示例。这将是 Excel VBA 讲座的最后一篇文章。
<<相关文章一览>>
- 开始 Excel VBA 课程。 (讲座预告,壮举。为什么我们推荐 Excel VBA)
- Excel VBA课程(一):Excel VBA概述
- Excel VBA教程(二):Excel VBA基础
- Excel VBA教程(三):Excel对象模型
- Excel VBA教程(四):使用Excel对象模型
- Excel VBA教程(五):Excel文件扩展名、VBE、字体设置
- Excel VBA教程(六):Excel VBA语言基础-变量
- Excel VBA教程(七):Excel VBA语言基础——语法
- Excel VBA教程(八):Excel VBA语言基础——数据类型、数据结构
- Excel VBA教程(九):Excel VBA How-To
- Excel VBA教程(十):与Excel VBA一起开发和使用的工具
- Excel VBA 课程的完整目录