摘要:向程序员以外的人员介绍一些使用 Visual Basic for Applications (VBA) 编程来扩展 Microsoft Office 2010 的基本方法。包括 VBA 语言概述、有关如何在不同的 Office 2010 应用程序中访问 VBA 的一些关键的详细信息、简单编程示例以及一些应用程序示例。(13 个打印页)
Kingfisher Computer Consulting 的 Tim Burnett
2009 年 11 月
适用范围:Microsoft Word 2010、Microsoft Outlook 2010、Microsoft Access 2010、Microsoft Excel 2010、Microsoft PowerPoint 2010、Microsoft Publisher 2010
内容
Office 2010 中的 VBA 编程
您是否面临从 Word 2010 中重复清除 50 个表的难题?您是否希望特定文档在打开时提示用户进行输入?您是否不清楚如何将 Microsoft Outlook 2010 中的联系人高效地导入 Microsoft Excel 2010 电子表格?
可以使用 Office 2010 的 VBA(一种可用于扩展 Office 2010 应用程序的简单且强大的编程语言)来执行这些任务并完成许多其他任务。
本文适用于有如下特点的有经验 Office 用户:希望了解有关 VBA 的信息,还希望深入了解编程对他们自定义 Office 2010 有何帮助。
Office 2010 应用程序套件包含一组丰富的功能,并包括用于创作和处理文档、电子邮件、数据库、表单、电子表格和演示文稿以及对其设置格式的许多不同方法。Office 2010 中 VBA 编程的强大功能是:几乎所有可以使用鼠标、键盘或对话框执行的操作都可以使用 VBA 来执行。另外,如果可以使用 VBA 执行一次操作,则可以轻松执行一百次这样的操作。(事实上,自动执行重复任务是 Office 中 VBA 的最常见用法之一。)
除了可通过编写 VBA 脚本来加速执行日常任务外,还可以使用 VBA 为 Office 2010 应用程序添加新功能,或以特定于您的业务需要的方式来提示文档用户并与之交互。例如,可以编写一些 VBA 代码,使其在用户首次尝试保存文档时显示一个弹出消息,提醒用户将文档保存到特定网络驱动器上。
本文探讨充分利用 VBA 编程功能的一些主要原因,并介绍 VBA 语言和可用于处理解决方案的现成工具。最后,本文包括一些提示和方法以避免一些常见编程错误。
何时使用 VBA 及使用原因
考虑使用 Office 2010 中的 VBA 编程功能有三个主要原因。
自动化和重复
在重复处理格式设置或更正问题时,VBA 有效且高效。例如,您是否曾经在 Word 中更改每页顶部的段落样式?您是否曾经必须重新设置从 Excel 粘贴到 Word 文档或 Outlook 电子邮件中的多个表的格式?您是否曾经必须在多个 Outlook 联系人中进行统一更改?
如果必须更改 10 次或 20 次以上,则可能值得使用 VBA 来自动执行更改操作。如果必须更改数百次,则肯定值得考虑。几乎所有您可以手动执行的格式设置或编辑更改都可以使用 VBA 执行。
用户交互扩展
有时,您希望鼓励或强迫用户以不属于标准应用程序的特定方式与 Office 2010 应用程序或文档进行交互。例如,您可能希望在用户打开、保存或打印文档时,提示用户采取一些特定操作。
Office 2010 应用程序之间的交互
您是否需要将 Outlook 2010 中的所有联系人复制到 Word 2010 中,然后以某种特定方式设置其格式?或者,您是否需要将数据从 Excel 2010 移动到一组 PowerPoint 2010 幻灯片中?有时,简单的复制和粘贴操作并没有按预期方式执行,或执行得太慢。您可以使用 VBA 编程同时处理两个或更多个 Office 2010 应用程序的详细信息,然后基于一个应用程序中的内容修改另一个应用程序中的内容。
换另一种方式执行任务
VBA 编程是一种功能强大的解决方案,但并不总是最佳方法。有时候使用其他途径来实现目标更合适。
关键问题在于是否有更简单的方法。在开始 VBA 项目之前,应考虑内置工具和标准功能。例如,如果有耗时的编辑或布局任务,请考虑使用样式或加速键来解决此问题。是否可以执行一次任务然后使用 Ctrl+Y(重做)来重复该任务?是否可以使用正确格式或模板创建新文档,然后将内容复制到该新文档中?
Office 2010 应用程序的功能很强大,其中可能已经包含您需要的解决方案。应花些时间了解有关 Office 2010 的更多信息,然后再转到编程过程。
在开始 VBA 项目之前,应确保您有时间使用 VBA。编程需要花费精力且过程可能无法预知。尤其对于初学者,如果没有时间仔细研究,则切勿依赖编程。当工期迫近时尝试编写“快速脚本”来解决问题会造成极大压力。如果您的时间很紧,则可能需要使用传统方法,即使这些方法单调又重复。
VBA 编程 101
通过代码使应用程序执行操作
您可能认为编写代码是一项神秘而又复杂的工作,但基本原则是使用日常推理,并且非常易于访问。Office 2010 应用程序的创建方式如下:公开可以接收指令的对象,方法类似于为电话设计可用于与之交互的按键。按下按键时,电话会识别指令并按照拨号顺序包括对应的号码。在编程时,您是通过向应用程序中的各个对象发送指令来与应用程序交互的。这些对象是可扩展的,但存在相应限制。它们只能执行为其设计的操作,并且只按照您的指示执行操作。
例如,考虑用户在 Word 2010 中打开一个文档,进行一些更改,保存并关闭该文档。在 VBA 编程中,Word 2010 会公开一个 Document 对象。通过使用 VBA 代码,您可以指示 Document 对象执行打开、保存或关闭之类的操作。
下面一节讨论如何组织和描述对象。
对象模型
开发人员在层次结构中组织编程对象,该层次结构称为应用程序的对象模型。例如,Word 具有顶级 Application 对象,它包含 Document 对象。Document 对象包含 Paragraph 对象,等等。对象模型粗略反映了您在用户界面中看到的内容。它们是应用程序及其功能的概念图。
对象的定义称为类,因此您可能会看到互换使用这两个术语的情况。从技术上讲,类是用于创建或实例化 某个对象的说明或模板。
创建对象后,可通过设置其属性 和调用其方法 来处理该对象。如果您认为对象是一个名词,则属性是描述该名词的形容词,方法是为名词赋予行动的动词。更改属性会更改对象的外观或行为的某些性质。调用对象的一个方法可使对象执行某项操作。
本文中的 VBA 代码对打开的 Office 2010 应用程序运行,其中代码处理的许多对象已在运行;例如,Application 本身、Excel 2010 中的 Worksheet、Word 2010 中的 Document、PowerPoint 2010 中的 Presentation、Outlook 2010 中的 Explorer 和 Folder 对象。在您了解对象模型的基本布局和 Application 的一些允许访问其当前状态的关键属性之后,即可开始使用 Office 中的 VBA 来扩展和处理该 Office 2010 应用程序。
方法
例如,在 Word 中,可以通过使用 Application 对象的 ActiveDocument 属性,来更改属性并调用当前 Word 文档的方法。此 ActiveDocument 属性返回对 Word 应用程序中当前活动的 Document 对象的引用。“返回引用”的意思是“允许您访问”。
下面的代码完全按照它所表达的含义运行;即,保存应用程序中的活动文档。
Application.ActiveDocument.Save
从左向右阅读代码,“在此 Application 中,ActiveDocument 引用了 Document,调用 Save 方法”。了解 Save 是形式最简单的方法;它不需要您提供任何详细指令。您指示 Document 对象执行 Save,它不需要您提供任何其他输入。
如果方法需要详细信息,这些详细信息称为参数。下面的代码运行 SaveAs 方法,该方法需要文件的新名称。
Application.ActiveDocument.SaveAs ("New Document Name.docx")
方法名称后面的小括号内列出的值是参数。此处,文件的新名称是 SaveAs 方法的参数。
属性
可使用相同的语法来设置用于读取属性的属性。下面的代码执行一种方法来选择 Excel 2010 中的单元格 A1,然后设置属性来在该单元格中放置内容。
Application.ActiveSheet.Range("A1").Select Application.Selection.Value = "Hello World"
VBA 编程中的第一个难题是了解每个 Office 2010 应用程序的对象模型并了解对象、方法和属性语法。所有 Office 2010 应用程序中的对象模型均类似,但每个对象模型又特定于文档种类和它处理的对象。
代码段的第一行中是 Excel 2010 对象 Application,然后是 ActiveSheet,它提供对活动工作表的访问权。这之后是不太熟悉的术语 Range,它的意思是“以此方式定义单元格区域”。代码指示 Range 创建本身,只使用 A1 作为定义的单元格集。换句话说,代码的第一行定义对象 Range,并对其运行方法来选择它。结果将自动存储在 Application 的另一个名为 Selection 的属性中。
代码的第二行将 Selection 的 Value 属性设置为文本“Hello World”,并且该值显示在单元格 A1 中。
您编写的最简单的 VBA 代码可能只是获取对 Office 应用程序中您要处理的对象的访问权并设置属性。例如,您可以在 VBA 脚本中获取对 Word 中表中各行的访问权并更改其格式。这听起来很简单,但这会非常有用;在编写该代码后,您可以利用编程的所有功能在若干个表或文档中进行此类相同更改,或根据某个逻辑或条件进行更改。对于计算机来说,进行 1000 次更改与进行 10 次更改没有任何区别,因此对于较大文档和问题,这具有规模经济,并且这是 VBA 的真正卓越之处,并可以节省您的时间。
宏和 Visual Basic 编辑器
既然您已对 Office 2010 应用程序如何公开其对象模型有所了解,那么可能迫不及待地希望尝试调用对象方法、设置对象属性以及响应对象事件。为此,您必须在某个位置以 Office 可以理解的方式编写代码;通常使用的是 Visual Basic 编辑器。尽管该编辑器是在默认情况下安装的,但在功能区中启用该编辑器之前,许多用户都不知道该编辑器的存在。
打开“开发工具”选项卡
所有 Office 2010 应用程序都使用功能区。该功能区中有一个“开发工具”选项卡,在此可以访问 Visual Basic 编辑器和其他开发人员工具。由于 Office 2010 在默认情况下不显示“开发工具”选项卡,因此必须使用以下过程启用该选项卡:
启用“开发工具”选项卡
在“文件”选项卡上,选择“选项”以打开“选项”对话框。
单击该对话框左侧的“自定义功能区”。
在该对话框左侧的“从下列位置选择命令”下,选择“常用命令”。
在该对话框右侧的“自定义功能区”下,从下拉列表框中选择“主选项卡”,然后选中“开发工具”复选框。
单击“确定”。
注释: |
---|
在 Office 2007 中,显示“开发工具”选项卡的方法是单击 Office 按钮,单击“选项”,然后在“选项”对话框的“常用”类别中选中“在功能区显示‘开发工具’选项卡”复选框 |
启用“开发工具”选项卡后,可以轻松找到“Visual Basic”和“宏”按钮。
图 1. “开发工具”选项卡上的按钮安全问题
为确保 Office 2010 用户免遭病毒和危险宏代码的危害,不能将宏代码保存在使用标准文件扩展名的标准 Office 2010 文档中。必须将代码保存在使用特殊扩展名的文件中。例如,不能将宏保存在扩展名为 .docx 的标准 Word 2010 文档中;而是必须使用扩展名为 .docm 且启用了宏的特殊 Word 2010 文档。
打开 .docm 文件时,Office 2010 安全功能可能仍会阻止文档中的宏运行,并通知您,也可能不通知您。检查所有 Office 2010 应用程序中信任中心中的设置和选项。默认设置禁止宏运行,但通知您已禁用宏并提供为该文档重新启用宏的选项。
可以通过创建“受信任位置”、“受信任的文档”或“受信任的发布者”来指定可以运行宏的特定文件夹。最好选择使用“受信任的发布者”,它适用于您分发的数字签名文档。有关特定 Office 2010 应用程序中安全设置的详细信息,请打开“选项”对话框,单击“信任中心”,然后单击“信任中心设置”。
注释: |
---|
一些 Office 2010 应用程序(如 Outlook 2010)默认情况下会将宏保存在您的本地计算机上的主模板中。虽然在您运行自己的宏时,该策略会减少您自己的计算机上的本地安全问题,但如果您要分发自己的宏,则需要部署策略。 |
录制宏
在单击“开发工具”选项卡上的“宏”按钮时,会打开“宏”对话框,该对话框允许您访问您可从特定文档或应用程序访问的 VBA 子例程或宏。“Visual Basic”按钮可打开 Visual Basic 编辑器,可在其中创建和编辑 VBA 代码。
Word 2010 和 Excel 2010 中“开发工具”选项卡上的另一个按钮是“录制宏”按钮,它自动生成可重现您在应用程序中执行的操作的 VBA 代码。“录制宏”是一个非常棒的工具,可通过它了解有关 VBA 的更多信息。阅读生成的代码可使您深入了解 VBA,并在您作为用户了解 Office 2010 和作为程序员了解该软件之间架起稳固桥梁。唯一需要指出的是生成的代码可能令人迷惑,因为宏编辑器必须对您的意图进行一些假定,而这些假定不一定准确。
录制宏
打开一个 Excel 2010 新工作簿,然后单击功能区中的“开发工具”选项卡。单击“录制宏”并接受“录制宏”对话框中的所有默认设置,包括将 Macro1 作为宏名称,将当前工作簿作为保存位置。
单击“确定”开始录制宏。请注意按钮文本如何变为“停止录制”。在完成要录制的操作后单击该按钮。
单击单元格 B1,然后键入程序员的第一个经典字符串:Hello World。停止键入并查看“停止录制”按钮;它将灰显,因为 Excel 2010 正在等待您完成在该单元格中键入值的操作。
单击单元格 B2 以完成单元格 B1 中的操作,然后单击“停止录制”。
单击“开发工具”选项卡上的“宏”,选择“Macro1”(如果未选择它),然后单击“编辑”在 Visual Basic 编辑器中查看 Macro1 的代码。
图 2. Visual Basic 编辑器中的宏代码查看代码
您创建的宏应类似于下面的代码。
Sub Macro1() ' ' Macro1 Macro ' ' Range("B1").Select ActiveCell.FormulaR1C1 = "Hello World" Range("B2").Select End Sub
了解与前面的选择单元格 A1 中的文本的代码段的相似之处和不同之处。在此代码中,选择了单元格 B1,然后将字符串 "Hello World" 应用于已激活的单元格。文本两边的引号指定相对于数值的字符串值。
是否还记得如何单击单元格 B2 以再次显示“停止录制”按钮?该操作也显示为一行代码。宏录制器录制每一次键击。
以撇号开头并由编辑器标为绿色的代码行是说明代码或提醒您和其他程序员代码用途的注释。VBA 忽略以单引号开头的任何行或行的一部分。在代码中编写清楚的相应注释非常重要,但该讨论不在本文范围内。本文后面对此代码的引用不包括这四个注释行。
当宏录制器生成代码时,它使用复杂的算法来确定您需要的方法和属性。如果您无法识别给定属性,有许多资源可帮助您。例如,在您录制的宏中,宏录制器生成了引用 ForumulaR1C1 属性的代码。不确定这是什么意思?
提示: |
---|
请注意,您应知道 Application 对象隐含在所有 VBA 宏中。您录制的代码的每行的开头都是Application.。 |
使用开发工具帮助
在录制的宏中选择 ForumulaR1C1,然后按 F1。帮助系统将运行快速搜索,并确定相应主题位于 Excel 2010“帮助”的 Excel 2010“开发工具”部分,然后列出 FormulaR1C1 属性。您可以单击链接来了解有关该属性的更多信息,但在执行此操作之前,要知道 Excel 对象模型引用链接位于窗口底部附近。单击该链接以查看 Excel 2010 在其对象模型中用于描述工作表及其组件的对象的长列表。单击其中任一对象可查看应用于该特定对象的属性和方法,以及对其他相关选项的交叉引用。许多“帮助”条目还包含可帮助您的简短代码示例。例如,您可以访问 Borders 对象中的链接来了解如何在 VBA 中设置边框。
Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
编辑代码
边框代码看起来与录制的宏不同。对象模型令人迷惑的一点是可使用多种方法处理任何给定对象(在本例中为单元格 A1)。
有时,学习编程的最好方法是对某些运行代码进行微小更改,然后查看结果。立即尝试。在 Visual Basic 编辑器中打开 Macro1,对代码进行以下更改。
Sub Macro1() Worksheets(1).Range("A1").Value = "Wow!" Worksheets(1).Range("A1").Borders.LineStyle = xlDouble End Sub
提示: |
---|
在处理代码时尽可能地使用复制和粘贴操作,以避免键入错误。 |
您无需保存代码即可进行尝试,返回到 Excel 2010 文档,单击“开发工具”选项卡上的“宏”,单击“Macro1”,然后单击“运行”。单元格 A1 现在包含文本 Wow! 且其四周有双线边框。
图 3. 您的第一个宏的结果
您刚才录制了宏,阅读了对象模型文档,并通过简单编程制作了一个可执行某项操作的 VBA 程序。祝贺您!
宏没有运行?阅读 VBA 中的调试建议。
编程提示和技巧
从使用示例开始
VBA 社区非常大;在 Web 上进行搜索几乎总是可以获得其执行的操作与您要执行的操作类似的 VBA 代码示例。如果您找不到好的示例,请尝试将任务分解为较小的单元,然后搜索其中每个单元,或者尝试考虑更常见、但类似的问题。从使用示例开始可为您节省数小时的时间。
这并不意味着编写严密的免费代码在 Web 上等待您使用。事实上,您找到的一些代码可能有缺陷或错误。但您联机或在 VBA 文档中找到的示例可为您提供良好的开端。请记住,学习编程需要时间和思索。在您忙于使用另一个解决方案来解决您的问题之前,请询问自己 VBA 是不是解决此问题的正确选择。
处理较简单的问题
编程过程可能会迅速变得复杂化。将问题分解为尽可能小的逻辑单元,然后独立编写并测试每个单元,这一点很重要,尤其对于初学者。如果您面前有太多代码,并且您变得迷惑或糊涂,请停止并撇开问题。当您重新面对问题时,可以将一个小问题复制到新模块中,解决该问题,让代码运行,并测试它以确保它能够运行。然后移动到下一个部分。
缺陷和调试
有两种主要类型的编程错误:语法 错误,即违反编程语言的语法规则;运行时 错误,即看上去语法正确,但在 VBA 尝试执行代码时失败。
虽然修复这些错误可能令人沮丧,但语法错误很容易捕获;如果您在代码中键入语法错误,Visual Basic 编辑器会发出嘟嘟声并闪烁。
例如,在 VBA 中,必须用双引号将字符串值引起来。若要了解使用单引号会发生什么,请返回到 Visual Basic 编辑器,将代码示例中的 "Wow!" 字符串替换为 'Wow!'(即,将单词 Wow 括在单引号中)。如果您单击下一行,Visual Basic 编辑器会做出响应。错误“Compile error: Expected: expression”(编译错误: 预期: 表达式)不太有帮助,但生成该错误的行会变为红色以告知您该行中有语法错误,因此,此程序不会运行。
单击“确定”,然后将文本更改回 "Wow!"。
运行时错误较难以捕获,因为编程语法看上去正确,但代码在 VBA 尝试执行它时失败。
例如,打开 Visual Basic 编辑器,在宏中将 Value 属性名称更改为 ValueX,故意引入运行时错误,因为Range 对象没有名为 ValueX 的属性。返回到 Excel 2010 文档,打开“宏”对话框,再次运行 Macro1。您应该看到一个说明运行时错误的 Visual Basic 消息框,错误文本为“Object doesn't support this property of method”(对象不支持此属性或方法)。虽然该文本解释得很清楚,但单击“调试”可查看更多信息。
当您返回到 Visual Basic 编辑器时,编辑器处于特定调试模式,即使用黄色突出显示失败的代码行。与预期的一样,突出显示了包括 ValueX 属性的行。
图 4. 运行中的 Visual Basic 调试程序
可以对运行中的 VBA 代码进行更改,以将 ValueX 更改回 Value,然后单击“调试”菜单下的绿色小播放按钮。程序应能够再次正常运行。
最好了解如何对更长、更复杂的程序更加慎重地使用调试程序。至少应了解如何设置断点以在您要查看代码时停止执行代码,如何添加监视点以在代码运行时查看不同变量和属性的值,以及如何逐行分步完成代码。所有这些选项均位于“调试”菜单中,并且认真的调试程序用户通常会记住附带的键盘快捷方式。
恰当使用参考材料
若要打开 Office 2010“帮助”中内置的“开发人员参考”,请通过单击功能区中的问号或按 F1,即可从任何 Office 2010 应用程序中打开帮助参考。然后,在“搜索”按钮右侧,单击下拉箭头来筛选内容。单击“开发人员参考”。如果您没有在左面板中看到内容,请单击小书籍图标来打开它,然后从此处展开对象模型参考。
图 5. 开发工具帮助上的筛选功能适用于所有 Office 2010 应用程序
浏览对象模型参考所花费的时间将得到回报。在您了解要使用的 Office 2010 应用程序的 VBA 语法和对象模型的基础知识后,您的技能将得到提升,您将从主观猜测转变为进行有方法的编程。
当然,Microsoft Office 开发人员中心是查阅文章、提示和社区信息的极好门户。
搜索论坛和组
所有程序员都会时不时遇到困难,即使在阅读他们可以找到的每篇参考文章之后。他们晚上睡觉时会失眠,因为他们在思考解决问题的各种方法。幸运的是,Internet 促进了互相帮助以解决编程问题的开发人员社区的发展。
在网络上搜索“office 开发人员论坛”时会显示几个讨论组。您也可以搜索“office 开发”或问题描述来查找论坛、博客文章和文章。
如果您已为解决问题而竭尽全力,那么就不要害怕将您的问题张贴到开发人员论坛上。这些论坛欢迎来自较新程序员的帖子,并且许多有经验的开发人员都很乐于提供帮助。
下面是在向开发人员论坛中张贴内容时需遵守的几点规定:
- 在张贴之前,应在网站上查找 FAQ 或论坛成员希望您遵循的准则。确保所张贴的内容符合这些准则,并位于论坛的正确区域。
- 包括清楚的完整代码示例,如果您的代码是一长段代码的一部分,请考虑编辑您的代码以向其他人进行阐述。
- 清楚准确地描述您的问题,并概述您为解决此问题已经采取的所有步骤。花些时间尽力编写好的帖子,尤其在您慌乱或匆忙时。采用对首次阅读问题陈述的读者有意义的方式介绍情况。
- 要有礼貌,并表达您的感激之情。
进一步了解编程
虽然本文很短且只触及 VBA 和编程的表面,但希望它能够为您入门提供足够帮助。
本节简单讨论一些较关键的主题。
变量
在本文提供的简单示例中,您处理的是应用程序已创建的对象。您可能希望创建自己的对象来存储值或对应用程序中临时使用的其他对象的引用。这些对象称为变量。
若要在 VBA 中使用变量,必须使用 Dim 语句告知 VBA 变量表示哪种类型的对象。然后,您可以设置其值并使用它来设置其他变量或属性。
Dim MyStringVariable As String MyStringVariable = "Wow!" Worksheets(1).Range("A1").Value = MyStringVariable
分支和循环
本文中的简单程序从上到下一次执行一行。编程的真正功能来自您必须根据指定的一个或多个条件确定要执行哪些代码行的选项。您可以进一步扩展这些功能,以便可以重复执行一项操作许多次。例如,下面的代码扩展了 Macro1。
Sub Macro1() If Worksheets(1).Range("A1").Value = "Yes!" Then Dim i As Integer For i = 2 To 10 Worksheets(1).Range("A" & i).Value = "OK! " & i Next i Else MsgBox "Put Yes! in cell A1" End If End Sub
将此代码键入或粘贴到 Visual Basic 编辑器中,然后运行它。按照出现的消息框中的指示操作,并将单元格 A1 中的文本从 Wow! 更改为 Yes!,然后再次运行它来查看循环功能。此代码段演示变量、分支和循环。在看到它运行后仔细阅读它,尝试确定每行执行时发生了什么。
所有 Office 2010 应用程序:代码示例
下面是一些要尝试的脚本;每个脚本解决一个 Office 2010 实际问题。
在 Outlook 2010 中创建电子邮件
Sub MakeMessage() Dim OutlookMessage As Outlook.MailItem Set OutlookMessage = Application.CreateItem(olMailItem) OutlookMessage.Subject = "Hello World!" OutlookMessage.Display Set OutlookMessage = Nothing End Sub
请注意,有时您可能希望在 Outlook 2010 中自动创建电子邮件;您也可以使用模板。
删除 Excel 2010 工作表中的空行
Sub DeleteEmptyRows() SelectedRange = Selection.Rows.Count ActiveCell.Offset(0, 0).Select For i = 1 To SelectedRange If ActiveCell.Value = "" Then Selection.EntireRow.Delete Else ActiveCell.Offset(1, 0).Select End If Next iEnd Sub
请注意,您可以选择一列单元格,然后运行此宏来删除所选列中具有空白单元格的所有行。
删除 PowerPoint 2010 中的空文本框
Sub RemoveEmptyTextBoxes() Dim SlideObj As Slide Dim ShapeObj As Shape Dim ShapeIndex As Integer For Each SlideObj In ActivePresentation.Slides For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1 Set ShapeObj = SlideObj.Shapes(ShapeIndex) If ShapeObj.Type = msoTextBox Then If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then ShapeObj.Delete End If End If Next ShapeIndex Next SlideObj End Sub
请注意,此代码循环访问所有幻灯片并删除没有任何文本的所有文本框。计数变量递减而不是递增,因为代码每次删除一个对象时,都会从集合中移除该对象,从而减小了计数。
将 Outlook 2010 中的联系人复制到 Word 2010
Sub CopyCurrentContact() Dim OutlookObj As Object Dim InspectorObj As Object Dim ItemObj As Object Set OutlookObj = CreateObject("Outlook.Application") Set InspectorObj = OutlookObj.ActiveInspector Set ItemObj = InspectorObj.CurrentItem Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName) End Sub
请注意,此代码将 Outlook 2010 中当前打开的联系人复制到打开的 Word 2010 文档中。仅当 Outlook 中包含当前打开以供检查的联系人时,此代码才运行。
总结
本文介绍 Office 2010 中的 Visual Basic for Applications (VBA) 的功能以及 VBA 如何可以自动执行重复任务。
其他资源