在Excel 中使用VBA 的第一步是让自己熟悉Visual Basic 编辑器(也称为VBA 编辑器或VB 编辑器)。
在本教程中,我将介绍有关VBA 编辑器的所有知识,以及在Excel VBA 中编码时应了解的一些有用选项。
内容
Excel 中的Visual Basic 编辑器是什么?
Visual Basic 编辑器是一个单独的应用程序,它是Excel 的一部分,只要您打开Excel 工作簿就会打开。默认情况下,它是隐藏的,要访问它,您需要激活它。
VB 编辑器是保存VB 代码的地方。
您可以通过多种方式在VB 编辑器中获取代码:
- 当您录制宏时,它会自动在VB 编辑器中创建一个新模块并将代码插入该模块中。
- 您可以在VB 编辑器中手动键入VB 代码。
- 您可以从其他工作簿或Internet 复制代码并将其粘贴到VB 编辑器中。
打开VB 编辑器
在Excel 中打开Visual Basic 编辑器有多种方法:
- 使用键盘快捷键(最简单、最快)
- 使用开发人员选项卡。
- 使用工作表选项卡。
让我们快速浏览每一个。
打开Visual Basic 编辑器的键盘快捷键
打开Visual Basic 编辑器的最简单方法是使用键盘快捷键– ALT + F11(按住ALT 键并按F11 键)。
执行此操作后,它将为Visual Basic 编辑器打开一个单独的窗口。
此快捷方式用作切换,因此当您再次使用它时,它将带您回到Excel 应用程序(无需关闭VB 编辑器)。
Mac 版本的快捷键是选择 + F11或Fn + Opt + F11
使用开发人员选项卡
要从功能区打开Visual Basic 编辑器:
- 单击“开发人员”选项卡(如果您没有看到“开发人员”选项卡,请阅读如何获取它)。
- 在代码组中,单击Visual Basic。
使用工作表选项卡
这是一种较少使用的打开Vb 编辑器的方法。
转到任何工作表选项卡,右键单击,然后选择“查看代码”。
此方法不仅会打开VB 编辑器,还会将您带到该工作表对象的代码窗口。
当您要编写仅适用于特定工作表的代码时,这很有用。这通常是工作表事件的情况。
Excel 中的Visual Basic 编辑器剖析
当您第一次打开VB 编辑器时,它可能看起来有点不知所措。
有不同的选项和部分,起初可能看起来是全新的。
此外,它仍然具有旧的Excel 97 天外观。多年来,虽然Excel 在设计和可用性方面有了很大改进,但VB 编辑器的外观并没有发生任何变化。
在本节中,我将带您了解Visual Basic 编辑器应用程序的不同部分。
注意:当我几年前开始使用VBA 时,我对所有这些新选项和窗口感到不知所措。但是当您习惯使用VBA 时,您会对其中的大部分内容感到满意。大多数情况下,您不需要使用所有选项,只需一手即可。
下面是VB 编辑器不同组件的图像。然后在本教程的以下部分中详细描述这些内容。
现在让我们快速浏览每个组件并了解它的作用:
菜单栏
这是您可以在VB 编辑器中使用的所有选项的地方。它类似于Excel 功能区,其中每个选项卡都有选项卡和选项。
您可以通过单击每个菜单元素来探索可用选项。
您会注意到VB 编辑器中的大多数选项旁边都提到了键盘快捷键。一旦您习惯了一些键盘快捷键,使用VB 编辑器就变得非常容易。
工具栏
默认情况下,VB 编辑器中有一个工具栏,其中包含一些您可能最常需要的有用选项。这就像Excel 中的快速访问工具栏。它使您可以快速访问一些有用的选项。
您可以通过删除或添加选项来稍微自定义它(通过单击工具栏末尾的小向下箭头)。
在大多数情况下,使用VB 编辑器时,您只需要默认工具栏即可。
您可以通过单击三个灰点(在工具栏的开头)并将其拖动到菜单栏上方来将工具栏移动到菜单栏上方。
注意:VB 编辑器中有四个工具栏——标准、调试、编辑和用户窗体。您在上图中看到的(也是默认的)是标准工具栏。您可以通过转到“查看”选项并将光标悬停在“工具栏”选项上来访问其他工具栏。如果需要,您可以将一个或多个工具栏添加到VB 编辑器。
项目浏览器
项目资源管理器是左侧的一个窗口,显示当前在Excel 中打开的所有对象。
使用Excel 时,每个打开的工作簿或加载项都是一个项目。这些项目中的每一个都可以包含一组对象。
例如,在下图中,Project Explorer 显示了两个打开的工作簿(Book1 和Book2)以及每个工作簿中的对象(工作表、ThisWorkbook 和Book1 中的模块)。
对象左侧有一个加号图标,您可以使用它来折叠对象列表或展开并查看对象的完整列表。
以下对象可以是Project Explorer 的一部分:
- 所有打开的工作簿– 在每个工作簿(也称为项目)内,您可以拥有以下对象:
- 工艺簿中每个工作表的工作表对象
- ThisWorkbook 对象,代表工作簿本身
- 每个图表工作表的Chartsheet 对象(这些不像工作表那样常见)
- 模块——这是使用宏记录器生成的代码所在的位置。您还可以在此处编写或复制粘贴VBA 代码。
- 所有打开的加载项
将Project Explorer 视为一个概述在给定时间在Excel 中打开的所有对象的地方。
打开Project Explorer 的键盘快捷键是控制+ R(按住control 键,然后按R)。要关闭它,只需单击Project Explorer 窗口右上角的关闭图标。
注意:对于Project Explorer 中的每个对象,都有一个代码窗口,您可以在其中编写代码(或从某处复制和粘贴)。双击对象时会出现代码窗口。
属性窗口
属性窗口是您可以查看选择对象的属性的地方。如果您还没有“属性”窗口,可以使用键盘快捷键F4(或转到“查看”选项卡并单击“属性”窗口)来获取它。
属性窗口是一个浮动窗口,您可以停靠在VB 编辑器中。在下面的示例中,我将它停靠在Project Explorer 下方。
属性窗口允许我们更改选定对象的属性。例如,如果我想让工作表隐藏(或非常隐藏),我可以通过更改所选工作表对象的Visible 属性来实现。
代码窗口
Project Explorer 中列出的每个对像都有一个代码窗口。您可以通过在项目资源管理器区域中双击对象来打开对象的代码窗口。
代码窗口是您编写代码或从其他地方复制粘贴代码的地方。
当您录制宏时,它的代码会进入模块的代码窗口。Excel 在录制宏时会自动插入一个模块以将代码放入其中。
即时窗口
立即窗口主要用于调试代码。我使用即时窗口的一种方法是在代码中使用Print.Debug 语句,然后运行代码。
它可以帮助我调试代码并确定我的代码卡在哪里。如果我在即时窗口中得到Print.Debug 的结果,我知道代码至少在该行之前有效。
如果您不熟悉VBA 编码,可能需要一些时间才能使用即时窗口进行调试。
默认情况下,即时窗口在VB 编辑器中不可见。您可以使用键盘快捷键Control + G 来获取它(或者可以转到“视图”选项卡并单击“立即窗口”)。
在VB 编辑器中添加代码的位置
我希望您现在对VB 编辑器是什么以及它的所有部分有一个基本的了解。
在本教程的这一部分中,我将向您展示在Visual Basic 编辑器中添加VBA 代码的位置。
有两个地方可以在Excel 中添加VBA 代码:
- 对象的代码窗口。这些对象可以是工作簿、工作表、用户表单等。
- 模块的代码窗口。
模块代码窗口与对象代码窗口
首先让我快速弄清楚在模块中添加代码与在目标代码窗口中添加代码之间的区别。
当您将代码添加到任何对象时,它取决于该对象的某些操作,该操作将触发该代码。例如,如果您想在打开该工作簿后立即取消隐藏该工作簿中的所有工作表,则代码将进入ThisWorkbook 对象(代表工作簿)。
在这种情况下,触发器是打开工作簿。
同样,如果您想在激活其他工作表后立即保护工作表,则该代码将进入工作表代码窗口。
这些触发器称为事件,您可以关联事件发生时要执行的代码。
相反,模块中的代码需要手动执行(或者也可以从其他子程序调用)。
当您录制宏时,Excel 会自动创建一个模块并将录制的宏代码插入其中。现在如果你必须运行这段代码,你需要手动执行宏。
在模块中添加VBA 代码
虽然录制宏会自动创建一个模块并将代码插入其中,但使用宏录制器时存在一些限制。例如,它不能使用循环或If Then Else 条件。
在这种情况下,最好手动复制和粘贴代码或自己编写代码。
模块可用于保存以下类型的VBA 代码:
- 声明:您可以在模块中声明变量。声明变量允许您指定变量可以保存的数据类型。您可以仅为子例程或模块中的所有子例程(或所有模块)声明变量
- 子例程(过程):这是包含您希望VBA 执行的步骤的代码。
- 函数过程:这是一个返回单个值的代码,您可以使用它来创建自定义函数(在VBA 中也称为用户定义函数或UDF)
默认情况下,模块不是工作簿的一部分。使用前需要先插入。
在VB 编辑器中添加模块
以下是添加模块的步骤:
- 右键单击工作簿的任何对象(您想要模块在其中)。
- 将光标悬停在插入选项上。
- 点击模块。
这将立即创建一个名为Module 的文件夹并插入一个名为Module 1 的对象。如果您已经插入了一个模块,则上述步骤将插入另一个模块。
插入模块后,您可以在项目资源管理器中双击模块对象,它将为其打开代码窗口。
现在您可以复制粘贴代码或自己编写代码。
卸下模块
以下是在Excel VBA 中删除模块的步骤:
- 右键单击要删除的模块。
- 单击删除模块选项。
- 在打开的对话框中,单击否。
注意:您可以在删除模块之前将其导出。它被保存为.bas 文件,您可以将其导入其他项目。要导出模块,请右键单击该模块,然后单击“导出文件”。
将代码添加到对象代码窗口
要打开对象的代码窗口,只需双击它。
当它打开时,您可以手动输入代码或从其他模块或互联网复制粘贴代码。
请注意,某些对象允许您选择要为其编写代码的事件。
例如,如果您想为工作表中选择更改时发生的事情编写代码,您需要首先从代码窗口左上角的下拉列表中选择工作表,然后从下拉列表中选择更改事件- 在右边。
注意:这些事件特定于对象。当您打开工作簿的代码窗口时,您将看到与工作簿对象相关的事件。当您打开工作表的代码窗口时,您将看到与工作表对象相关的事件。
自定义VB 编辑器
虽然Visual Basic 编辑器的默认设置对大多数用户来说已经足够好,但它确实允许您进一步自定义界面和一些功能。
在本教程的这一部分中,我将向您展示自定义VB 编辑器时的所有选项。
要自定义VB 编辑器环境,请单击菜单栏中的工具,然后单击选项。
这将打开“选项”对话框,该对话框将为您提供VB 编辑器中的所有自定义选项。“选项”对话框有四个选项卡(如下所示),它们具有Visual Basic 编辑器的各种自定义选项。
让我们快速浏览每个选项卡以及每个选项卡中的重要选项。
编辑器选项卡
虽然内置设置在大多数情况下都可以正常工作,但让我仍然浏览此选项卡中的选项。
随着您在Excel 中更熟练地使用VBA,您可能希望使用其中一些选项自定义VB 编辑器。
自动语法检查
在Excel 中使用VBA 时,一旦出现语法错误,就会弹出一个对话框(带有一些关于错误的描述)。如下图所示:
如果禁用此选项,即使出现语法错误,此弹出框也不会出现。但是,代码文本中的颜色会发生变化,以指示存在错误。
如果您是初学者,我建议您启用此选项。随着您对编码的经验越来越丰富,您可能会开始发现这些弹出框令人讨厌,然后您可以禁用此选项。
需要变量声明
这是我建议启用的一个选项。
当您使用VBA 时,您将使用变量来保存不同的数据类型和对象。
当您启用此选项时,它会自动在代码窗口顶部插入“Option Explicit”语句。这迫使您声明您在代码中使用的所有变量。如果不声明变量并尝试执行代码,会报错(如下图)。
在上面的例子中,我使用了变量Var,但我没有声明它。因此,当我尝试运行代码时,它会显示错误。
当您有很多变量时,此选项非常有用。它通常可以帮助我找到拼写错误的变量名称,因为它们被视为未声明并显示错误。
注意:启用此选项时,它不会影响现有模块。
自动列表成员
此选项非常有用,因为它可以帮助您获取对象方法的属性列表。
例如,如果我想删除一个工作表(Sheet1),我需要使用Sheet1.Delete 行。
当我输入代码时,只要我输入点,它就会显示与Worksheet 对象关联的所有方法和属性(如下所示)。
自动列表功能非常棒,因为它允许您:
- 从列表中快速选择属性和方法,节省时间
- 向您展示您可能不知道的所有属性和方法
- 避免拼写错误
默认情况下启用此选项,我建议保持这种状态。
自动快速信息选项
当您在Excel 工作表中键入一个函数时,它会向您显示有关该函数的一些信息——例如它采用的参数。
同样,当您在VBA 中键入一个函数时,它会向您显示一些信息(如下所示)。但要做到这一点,您需要确保启用“自动快速信息”选项(默认情况下)。
自动数据提示选项
当您逐行浏览代码并将光标放在变量名上方时,它将显示变量的值。
我发现它在调试代码或逐行浏览包含循环的代码时非常有用。
在上面的示例中,只要我将光标放在变量(var) 上,它就会显示它所保存的值。
默认情况下启用此选项,我建议您保持这种状态。
自动缩进
由于VBA 代码可能会变得冗长且凌乱,因此使用缩进会增加代码的可读性。
编写代码时,可以使用tab 键缩进。
此选项可确保当您完成缩进的行并按Enter 后,下一行不会从头开始,而是与前一行具有相同的缩进。
在上面的示例中,在我编写Debug.Print 行并按Enter 后,它将在它的正下方开始(具有相同的缩进级别)。
我发现这个选项很有用,关闭它意味着手动缩进我想要缩进的代码块中的每一行。
如果需要,您可以更改缩进值。我将其保持为默认值。
拖放文本编辑
启用此选项后,它允许您选择代码块并将其拖放。
它可以节省时间,因为您不必先剪切然后粘贴。您可以简单地选择并拖动它。
默认情况下启用此选项,我建议您保持这种状态。
默认为完整模块视图
启用此选项后,您将能够在一个可滚动列表中查看模块中的所有过程。
如果禁用此选项,您一次只能看到一个模块。您必须从代码窗口右上角的下拉列表中选择要查看的模块。
默认情况下启用此选项,我建议保持这种状态。
当您有多个庞大的程序并且在这些程序中滚动需要时间时,或者当您有很多程序并且想要快速找到它而不是在滚动时浪费时间时,您可能想要禁用它的一个原因是。
程序分隔符
启用此选项后,您将在两个过程之间看到一条线(一种分隔线)。
我发现这很有用,因为它可以直观地显示一个过程何时结束而另一个过程何时开始。
它默认启用,我建议保持这种状态。
编辑器格式选项卡
使用编辑器格式选项卡中的选项,您可以自定义代码在代码窗口中的外观。
就个人而言,我保留所有默认选项,因为我很好。如果需要,您可以根据自己的喜好进行调整。
要进行更改,您需要首先在代码颜色框中选择一个选项。选择一个选项后,您可以修改它的前景色、背景色和指示器颜色。
字体类型和字体大小也可以在此选项卡中设置。建议使用固定宽度的字体,例如Courier New,因为它使代码更具可读性。
请注意,所有代码类型(即代码颜色框中显示的所有代码类型)的字体类型和大小设置将保持不变。
下面是我选择了断点的图像,我可以更改它的格式。
注意:启用边距指示器栏选项后,代码左侧会显示一个小边距栏。这很有帮助,因为它在执行代码时显示了有用的指标。在上面的例子中,当你设置断点时,它会自动在边距栏中的行的左侧显示一个红点。或者,要设置断点,您只需单击要作为断点的代码行左侧的边距栏。
默认情况下,保证金指示器栏是启用的,我建议保持这种状态。
我的一位VBA 课程学生发现此自定义选项很有用,而且她是色盲。使用此处的选项,她能够设置颜色和格式,使她可以轻松地使用VBA。
常规选项卡
常规选项卡有许多选项,但您无需更改任何选项。
我建议您保持所有选项不变。
在此选项卡中要了解的一个重要选项是错误处理。
默认情况下,选择“中断未处理的错误”,我建议保持这种方式。
此选项意味着如果您的代码遇到错误,并且您尚未在代码中处理该错误,那么它将中断并停止。但是,如果您已经解决了错误(例如通过使用On Error Resume Next 或On Error Goto 选项),那么它不会中断(因为错误没有未处理)。
对接选项卡
在此选项卡中,您可以指定要停靠的窗口。
停靠意味着您可以固定一个窗口(例如项目资源管理器或“属性”窗口)的位置,使其不会浮动,您可以同时查看所有不同的窗口。
如果您不停靠,您将能够在全屏模式下一次查看一个窗口,并且必须切换到另一个窗口。
我建议保留默认设置。