几乎在所有Microsoft Office产品中运行的VBA程式设计 平台是任何人都可以用来增强对这些产品的使用的最强大的工具之一。
此VBA指南初学者将向您展示如何在Office应用程序中添加“开发人员”菜单,如何进入VBA编辑器窗口以及基本的VBA语句和循环如何工作,以便您可以在Excel,Word,Powerpoint,Outlook和OneNote中开始使用VBA。 。
此VBA指南使用最新版本的Microsoft Office产品。如果您使用的是较早版本,则可能会与屏幕截图有些许差异。
如何启用和使用VBA编辑器
在任何Office中本指南中使用的产品,您可能会注意到您没有引用的“开发人员”菜单。开发人员菜单仅在Excel,Word,Outlook和Powerpoint中可用。 OneNote没有提供从应用程序内部编辑VBA代码的工具,但是您仍然可以引用OneNote API与其他Office程序中的OneNote进行交互。
您将在我们即将发布的Advanced VBA指南中学习如何操作。
左列表包括该Office应用程序中所有可用的菜单和菜单命令。右边的列表是当前可用或已激活的列表。
<!-In_content_1全部:[300x250] / dfp:[640x360]->
初学者的常规VBA编程技巧
当您打开VBA编辑器时,您会注意到,左侧面板中的导航选项看上去与一个Office应用程序不同。
这是因为可以放置VBA代码的可用对象取决于应用程序中存在的对象。例如,在Excel中,您可以将VBA代码添加到工作簿或图纸对象。在Word中,您可以将VBA代码添加到文档中。在Powerpoint中,仅用于模块。
因此,不要对不同的菜单感到惊讶。在所有应用程序中,VBA代码的结构和语法都是相同的。唯一的不同是您可以引用的对象以及可以通过VBA代码对这些对象执行的操作。
在深入研究不同的对象和可以通过VBA代码对其执行的操作之前,首先查看编写VBA代码时可以使用的最常见的VBA结构和语法。
将VBA代码放在何处
VBA编辑器,您需要使用编辑窗口顶部的两个下拉框来选择要将代码附加到哪个对象,以及希望何时运行代码。
例如,在Excel,如果选择工作表和激活,则只要打开工作表,代码就会运行。
其他工作表您可以用来触发VBA代码的操作包括何时更改工作表,何时关闭(停用),运行工作表计算等,等等。
在编辑器中添加VBA代码时,请务必确保将VBA代码放在对象上,并使用要用于触发该代码的正确操作。
VBA IF语句
IF语句在VBA中的工作方式与在任何其他编程语言中一样。
IF语句的第一部分着眼于一个条件或一组条件是否为真。这些条件可以由AND或OR运算符合并以将它们链接在一起。
一个示例是检查电子表格中的成绩是高于还是低于“及格”成绩,然后分配及格或失败状态到另一个单元格。
如果单元格(2,2)>75,则单元格(2,3)=“通过”其他单元格(2,3)=“失败”
如果您不希望将整个语句放在一行上,则可以通过在行尾添加“ _”符号将其分成多行。
如果单元格(2,2)>75然后_
单元格(2,3)=“通过” _
单元格(2,3)=“失败”
使用此技术通常可以使代码更易于阅读和调试。
VBA用于下一个循环
IF语句非常适合进行单个比较,例如上面的示例所示。但是,如果您要遍历整个单元格区域并在每个单元格上执行相同的IF语句,该怎么办?
在这种情况下,您将需要FOR循环。
为此,您需要使用范围的长度,并以包含数据的行数遍历该长度。
为此,您需要定义范围和单元格变量,并循环遍历它们。您还需要定义一个计数器,以便将结果输出到适当的行。因此,您的VBA代码将首先包含这一行。
如下定义范围大小。
设置rng = Range(“ B2:B7”)
rowCounter = 2
最后,您可以创建您的FOR循环将逐步遍历该范围内的每个单元格并进行比较。
For Each cell In rngIf cell.Value > 75 Then _ Cells(rowCounter, 3) = "Pass" Else _ Cells(rowCounter, 3) = "Fail" rowCounter = rowCounter + 1 Next cell
一旦运行此VBA脚本 ,您就会看到
VBA While循环
While循环也循环执行一系列语句,就像FOR循环一样,但是循环继续的条件仍然存在
例如,您可以通过简单地使用rowCounter变量,在上面编写与WHILE循环相同的FOR循环。
While rowCounter < rng.Count + 2If Cells(rowCounter, 2) > 75 Then _ Cells(rowCounter, 3) = "Pass" Else _ Cells(rowCounter, 3) = "Fail" rowCounter = rowCounter + 1 Wend
注意:必需rng.Count + 2终止限制,因为行计数器从2开始,并且需要在数据结束的第7行结束。但是,范围(B2:B7)的计数仅为6,而While循环仅在计数器比计数器更大时才结束–因此最后一个rowCounter值需要为8(或rng.Count + 2)。
您还可以如下设置While循环:
rowCounter <= rng.Count + 1
只能将范围计数(6)加1,因为一旦rowCounter变量到达数据的末尾(第7行),循环就可以结束。
VBA循环并执行直到循环
执行While和执行至直到循环与While循环几乎相同,但工作方式略有不同。
在这种情况下,您将重写t他的While循环如下所示,作为Do-While循环。
DoIf Cells(rowCounter, 2) > 75 Then _ Cells(rowCounter, 3) = "Pass" Else _ Cells(rowCounter, 3) = "Fail" rowCounter = rowCounter + 1 Loop While rowCounter < rng.Count + 2
在这种情况下,逻辑变化不大,但是如果您要确保逻辑比较是在所有语句都运行之后进行的(无论它们至少运行一次),然后执行Do-While或Do-Until循环是正确的选择。
VBA Select Case语句
开始构建VBA代码所需了解的逻辑语句的最终类型是Select Case语句。
以上述示例为例,假设您想要一种不仅仅通过失败的评分方法。相反,您希望分配一个从A到F的字母等级。
可以使用以下Select Case语句来做到这一点:
For Each cell In rngSelect Case cell Case 95 To 100 Cells(rowCounter, 3) = "A" Case 85 To 94 Cells(rowCounter, 3) = "B" Case 75 To 84 Cells(rowCounter, 3) = "C" Case 65 To 74 Cells(rowCounter, 3) = "D" Case 0 To 64 Cells(rowCounter, 3) = "F" End Select rowCounter = rowCounter + 1 Next cell
结果电子表格此VBA脚本运行后,如下所示。
现在您已经知道在Microsoft Office应用程序中开始使用VBA所需的全部知识。