【转】Office 中的 VBA 入门

链接:https://docs.microsoft.com/zh-CN/office/vba/Library-Reference/Concepts/getting-started-with-vba-in-office
你是否面临着重复清理 Word 中五十个表格的工作? 你是否希望有一个特殊的文档能够在打开时提示用户进行输入? 你是否感觉难以弄明白如何将 Microsoft Outlook 中获取的联系人有效地导入 Microsoft Excel 电子表格?
可以使用 Office 的 VBA(一种可用于扩展 Office 应用程序的简单且强大的编程语言)来执行这些任务并完成许多其他任务。
本文适用于希望了解 VBA 和希望深入了解编程如何帮助他们自定义 Office 的有经验的 Office 用户。
Office 应用程序套件包含一组丰富的功能,并包括用于创作和处理文档、电子邮件、数据库、表单、电子表格和演示文稿以及对其设置格式的许多不同方法。Office 中 VBA 编程的强大功能是:几乎所有可以使用鼠标、键盘或对话框执行的操作都可以使用 VBA 来执行。另外,如果可以使用 VBA 执行一次操作,则可以轻松执行一百次这样的操作。(事实上,自动执行重复任务是 Office 中 VBA 的最常见用法之一。)
除了可通过编写 VBA 脚本来加速执行日常任务外,还可以使用 VBA 为 Office 应用程序添加新功能,或以特定于业务需要的方式来提示文档用户并与之交互。例如,可以编写一些 VBA 代码,使其在用户首次尝试保存文档时显示一个弹出消息,提醒用户将文档保存到特定网络驱动器上。
本文探讨充分利用 VBA 编程功能的一些主要原因,并介绍 VBA 语言和可用于处理解决方案的现成工具。最后,本文包括一些提示和方法以避免一些常见编程错误。
何时使用 VBA 及使用原因
考虑使用 Office 中的 VBA 编程功能有三个主要原因。
自动化&重复

在重复处理格式设置或更正问题时,VBA 有效且高效。例如,您是否曾经在 Word 中更改每页顶部的段落样式?您是否曾经必须重新设置从 Excel 粘贴到 Word 文档或 Outlook 电子邮件中的多个表的格式?您是否曾经必须在多个 Outlook 联系人中进行统一更改?
如果必须更改 10 次或 20 次以上,则可能值得使用 VBA 来自动执行更改操作。如果必须更改数百次,则肯定值得考虑。几乎所有您可以手动执行的格式设置或编辑更改都可以使用 VBA 执行。
用户交互扩展

有时,你希望鼓励或强迫用户以不属于标准应用程序的特定方式与 Office 应用程序或文档进行交互。例如,你可能希望在用户打开、保存或打印文档时,提示他们执行一些特定操作。
Office 应用程序之间的交互

你是否需要将 Outlook 中的所有联系人复制到 Word 中,然后以某种特定方式设置其格式?或者,你是否需要将数据从 Excel 移动到一组 PowerPoint 幻灯片中?有时,简单的复制和粘贴操作并没有按预期方式执行,或执行得太慢。你可以使用 VBA 编程同时处理两个或更多个 Office 应用程序的详细信息,然后基于一个应用程序中的内容修改另一个应用程序中的内容。
换另一种方式执行任务

VBA 编程是一种功能强大的解决方案,但并不总是最佳方法。有时候使用其他途径来实现目标更合适。
关键问题在于是否有更简单的方法。在开始 VBA 项目之前,应考虑内置工具和标准功能。例如,如果有耗时的编辑或布局任务,请考虑使用样式或加速键来解决此问题。是否可以执行一次任务然后使用 Ctrl+Y(重做)来重复该任务?是否可以使用正确格式或模板创建新文档,然后将内容复制到该新文档中?
Office 应用程序的功能很强大,其中可能已经包含你需要的解决方案。应花些时间了解有关 Office 的更多信息,然后再转到编程过程。
在开始 VBA 项目之前,应确保您有时间使用 VBA。编程需要花费精力且过程可能无法预知。尤其对于初学者,如果没有时间仔细研究,则切勿依赖编程。当工期迫近时尝试编写“快速脚本”来解决问题会造成极大压力。如果您的时间很紧,则可能需要使用传统方法,即使这些方法单调又重复。
VBA 编程 101
通过代码使应用程序执行操作

你可能认为编写代码是一项神秘而复杂的工作,但其基本原则是使用日常推理,并且很容易掌握。 Microsoft Office 应用程序以这样的方式创建:它们公开能够接收指令的事物(称为对象),这与将电话设计为包含按键以用于和电话交互的方式相同。 按下按键时,电话会识别指令,并按照拨号顺序包含对应的号码。 在编程时,你通过向应用程序中的各种对象发送指令与应用程序进行交互。 这些对象是可扩展的,但各有各的限制。 这些对象只能执行为其设计的操作,并且只能按照你的指令执行操作。
例如,考虑用户在 Word 中打开一个文档,进行一些更改,保存并关闭该文档。在 VBA 编程中,Word 会公开一个 Document 对象。通过使用 VBA 代码,你可以指示 Document 对象执行打开、保存或关闭之类的操作。
下面一节讨论如何组织和描述对象。
对象模型
开发人员在层次结构中组织编程对象,该层次结构被称为应用程序的对象模型。 例如,Word 具有包含 Document 对象的顶级应用程序对象。 Document 对象包含 Paragraph 对象等。 对象模型大致反映你在用户界面中看到的内容。 它们是应用程序及其功能的概念图。
对象的定义被称为类,因此,你可能看到这两个术语互换使用。 从技术上来讲,类是用于创建或实例化对象的说明或模板。
对象一旦存在,你就可以通过设置其属性和调用其方法来进行操控。 如果将对象视为一个名词,则属性是描述该名词的形容词,而方法是对该名词进行动画处理的动词。 更改某个属性将更改对象外观或行为的某些品质。 调用任一对象方法将导致对象执行某些操作。
本文中的 VBA 代码对打开的 Office 应用程序运行,其中代码处理的许多对象已在运行;例如,Application 本身、Excel 中的 Worksheet、Word 中的 Document、PowerPoint 中的 Presentation、Outlook 中的 Explorer 和 Folder 对象。在你了解对象模型的基本布局和 Application 的一些允许访问其当前状态的关键属性之后,即可开始使用 Office 中的 VBA 来扩展和处理该 Office 应用程序。
方法
例如,在 Word 中,你可以通过使用 Application 对象的 ActiveDocument 属性更改属性,并调用当前 Word 文档的方法。 此 ActiveDocument 属性将返回对当前在 Word 应用程序中处于活动状态的 Document 对象的引用。 “返回引用”意思是“可以访问。”
下面的代码完全按照它所表达的含义运行;即,保存应用程序中的活动文档。
VB.net

复制
Application.ActiveDocument.Save
从左到右读取代码,“在该 Application 中(Document 由 ActiveDocument 引用),调用 Save 方法。” 请注意,Save 是最简单的方法;它不需要从你那里获得任何详细指令。 指示 Document 对象执行 Save 指令,它不需要你输入更多的信息。
如果某个方法需要更多信息,则这些详细信息被称为参数。 下面的代码运行 SaveAs 方法,该方法需要文件的新名称。
VB.net

复制
Application.ActiveDocument.SaveAs (“New Document Name.docx”)
方法名称后的括号中列出的值是参数。 此处,文件的新名称是 SaveAs 方法的参数。
属性
可以使用相同的语法来设置用于读取属性的属性。下面的代码执行一种方法以选择 Excel 中的单元格 A1,然后设置属性以在该单元格中放置内容。
VB.net

复制
Application.ActiveSheet.Range(“A1”).Select
Application.Selection.Value = “Hello World”
VBA 编程中的第一个难题是了解每个 Office 应用程序的对象模型并了解对象、方法和属性语法。所有 Office 应用程序中的对象模型均类似,但每个对象模型又特定于文档种类和它处理的对象。
在代码段的第一行,是 Application 对象,这次是 Excel,然后是 ActiveSheet,它提供对活动工作表的访问权限。 在这之后,是不太熟悉的术语“Range”,它表示“用此方法定义单元格的范围。” 代码指示** Range** 自行创建,只需将 A1 作为其定义的一组单元格。 也就是说,代码的第一行定义对象“Range”,并对其运行方法以选择它。 结果会自动存储在名为 Selection 的 Application 的另一个属性中。
代码的第二行将 Selection 的 Value 属性设置为文本“Hello World”,且该值显示在单元格 A1 中。
你编写的最简单的 VBA 代码可能只是获取对 Office 应用程序中你要处理的对象的访问权限并设置属性。例如,你可以在 VBA 脚本中获取对 Word 中表中各行的访问权限并更改其格式。
这听起来很简单,但非常有用;在编写该代码后,你可以利用编程的所有功能在若干个表或文档中进行此类相同更改,或根据某个逻辑或条件进行更改。对于计算机来说,进行 1000 次更改与进行 10 次更改没有任何区别,因此对于较大文档和问题,这具有规模经济,并且这是 VBA 的真正卓越之处,并可以节省你的时间。
宏和 Visual Basic 编辑器

既然你已对 Office 应用程序如何公开其对象模型有所了解,那么可能迫不及待地希望尝试调用对象方法、设置对象属性以及响应对象事件。为此,你必须在某个位置以 Office 可以理解的方式编写代码;通常使用的是 Visual Basic 编辑器。尽管该编辑器是在默认情况下安装的,但在功能区中启用该编辑器之前,许多用户都不知道该编辑器的存在。
打开“开发工具”选项卡
所有 Office 应用程序都使用该功能区。 功能区上的一个选项卡是“开发工具”****选项卡,在此可以访问 Visual Basic 编辑器和其他开发人员工具。 因为 Office 在默认情况下并不显示“开发工具”****选项卡,所以你必须使用以下过程启用它:
启用“开发工具”选项卡

在“文件”****选项卡上,选择“选项”打开“选项”对话框。
单击该对话框左侧的“自定义功能区”

在该对话框左侧的“从下列位置选择命令”下,选择“常用命令”。
在该对话框右侧的“自定义功能区”下,从下拉列表框中选择“主选项卡”,然后选中“开发工具”复选框。
单击“确定”

注意 在 Office 2007 中,显示“开发工具”选项卡的方法是单击 Office 按钮,单击“选项”
,然后在“选项”****对话框的“常用”****类别中选中“在功能区显示‘开发工具’选项卡”****复选框
启用“开发工具”****选项卡后,可以轻松找到“Visual Basic”****和“宏”****按钮。
图 1.“开发工具”选项卡上的按钮
“开发工具”选项卡上的按钮
安全问题
为确保 Office 用户免遭病毒和危险宏代码的危害,不能将宏代码保存在使用标准文件扩展名的标准 Office 文档中。必须将代码保存在使用特殊扩展名的文件中。例如,不能将宏保存在扩展名为 .docx 的标准 Word 文档中;而是必须使用扩展名为 .docm 且启用了宏的特殊 Word 文档。
打开 .docm 文件时,Office 安全功能可能仍会阻止文档中的宏运行,并通知你,也可能不通知你。检查所有 Office 应用程序中信任中心中的设置和选项。默认设置禁止宏运行,但通知你已禁用宏并提供为该文档重新启用宏的选项。
通过创建受信任位置、受信任文档或受信任的发布者,可以指定运行宏的特定文件夹。 最便携的选项是使用受信任的发布者,它使用分发的数字签名文档。 有关在特定 Office 应用程序中的安全设置的详细信息,请打开“选项”****对话框,然后依次单击“信任中心”和“信任中心设置”。
注意 某些 Office 应用程序(如 Outlook)默认情况下会将宏保存在你本地计算机上的主模板中。 虽然在运行自己的宏时,该策略会减少自己的计算机上的本地安全问题,但如果你要分发自己的宏,则需要部署策略。
录制宏
在单击“开发工具”****选项卡上的“宏”****按钮时,会打开“宏”****对话框,该对话框允许访问可从特定文档或应用程序访问的 VBA 子例程或宏。 “Visual Basic”****按钮可打开 Visual Basic 编辑器,可使用该编辑器创建和编辑 VBA 代码。
Word 和 Excel 中的“开发工具”****选项卡上的另一个按钮是“录制宏”****按钮,该按钮自动生成 VBA 代码,能够再现你在应用程序中执行的操作。 录制宏是可以用于了解有关 VBA 的详细信息的理想工具。 阅读生成的代码可以让你深入了解 VBA,并在你作为用户需要了解的 Office 知识和作为程序员需要了解的 Office 知识之间架起一座稳定的桥梁。 唯一需要说明的一点是,生成的代码可能令人困惑,因为宏编辑器必须对你的意图进行一些假设,而这些假设不一定准确。
录制宏

将 Excel 打开为新的工作簿,并单击功能区中的“开发工具”****选项卡。 单击“录制宏”****并接受“录制宏”****对话框中的所有默认设置,将 Macro1 作为宏名称,将此工作簿作为保存位置。
单击“确定”****开始录制宏。 请注意按钮文本是如何更改为“停止录制”的。 完成想要录制的操作后即单击该按钮。
单击单元格 B1 并键入程序员经典的第一个字符串:Hello World。 停止键入并查看“停止录制”按钮;它将灰显,因为 Excel 正在等待你完成在该单元格中键入值的操作。
单击单元格 B2 以完成单元格 B1 中的操作,然后单击“停止录制”

单击开发工具选项卡上的“宏”,选择“Macro1”(如果未选择),然后单击“编辑”****在 Visual Basic 编辑器中查看 Macro1 的代码。
图 2.Visual Basic Editor 中的宏代码
Visual Basic Editor 中的宏代码
查看代码
您创建的宏应类似于下面的代码。
VB.net

复制
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 帮助的“Excel 开发工具”部分,并列出 FormulaR1C1 属性。 可以单击该链接了解有关该属性的详细信息,但在执行该操作前,请注意窗口底部附近的 Excel 对象模型参考链接。 单击该链接可查看 Excel 在其对象模型中用于描述工作表及其组件所使用的对象的长列表。 单击以上任一选项可查看适用于该特定对象的属性和方法,以及对不同相关选项的交叉引用。 许多帮助项也有简短的代码示例,可以为你提供帮助。 例如,可以点击 Borders 对象中的链接,以查看如何在 VBA 中设置边框。
VB.net

复制
Worksheets(1).Range(“A1”).Borders.LineStyle = xlDouble
编辑代码
边框代码看起来与录制的宏不同。对象模型令人迷惑的一点是可使用多种方法处理任何给定对象(在本例中为单元格 A1)。
有时,学习编程的最好方法是对某些运行代码进行微小更改,然后查看结果。立即尝试。在 Visual Basic 编辑器中打开 Macro1,对代码进行以下更改。
VB.net

复制
Sub Macro1()
Worksheets(1).Range(“A1”).Value = “Wow!”
Worksheets(1).Range(“A1”).Borders.LineStyle = xlDouble
End Sub
提示 在处理代码时尽可能地使用复制和粘贴操作,以避免键入错误。
无需保存代码即可进行尝试,返回到 Excel 文档,单击“开发工具”选项卡上的“宏”,单击“Macro1”,然后单击“运行”。 单元格 A1 现在包含文本 Wow! 且其四周有双线边框。
图 3.第一个宏的运行结果
第一个宏的运行结果
您刚才录制了宏,阅读了对象模型文档,并通过简单编程制作了一个可执行某项操作的 VBA 程序。祝贺您!
宏没有运行?阅读 VBA 中的调试建议。
编程提示和技巧
从使用示例开始

VBA 社区非常大;在 Web 上进行搜索几乎总是可以获得其执行的操作与您要执行的操作类似的 VBA 代码示例。如果您找不到好的示例,请尝试将任务分解为较小的单元,然后搜索其中每个单元,或者尝试考虑更常见、但类似的问题。从使用示例开始可为您节省数小时的时间。
这并不意味着编写严密的免费代码在 Web 上等待您使用。事实上,您找到的一些代码可能有缺陷或错误。但您联机或在 VBA 文档中找到的示例可为您提供良好的开端。请记住,学习编程需要时间和思索。在您忙于使用另一个解决方案来解决您的问题之前,请询问自己 VBA 是不是解决此问题的正确选择。
处理较简单的问题

编程过程可能会迅速变得复杂化。将问题分解为尽可能小的逻辑单元,然后独立编写并测试每个单元,这一点很重要,尤其对于初学者。如果您面前有太多代码,并且您变得迷惑或糊涂,请停止并撇开问题。当您重新面对问题时,可以将一个小问题复制到新模块中,解决该问题,让代码运行,并测试它以确保它能够运行。然后移动到下一个部分。
缺陷和调试

有两种主要类型的编程错误:语法 错误,即违反编程语言的语法规则;运行时 错误,即看上去语法正确,但在 VBA 尝试执行代码时失败。
虽然修复这些错误可能令人沮丧,但语法错误很容易捕获;如果您在代码中键入语法错误,Visual Basic 编辑器会发出嘟嘟声并闪烁。
例如,在 VBA 中必须使用双引号将字符串值括起来。 若要了解改用单引号会发生什么情况,请返回到 Visual Basic 编辑器并将代码示例中的 “Wow!” 替换为 ‘Wow!’ (即,单词 Wow 用单引号括起来)。 如果单击下一行,Visual Basic 编辑器会做出响应。 错误“编译错误:预期: 表达式”不是很有帮助,但是生成错误的行变为红色,告诉你在该行存在语法错误,因此,该程序将无法运行。
单击“确定”****,然后将文本改回 “Wow!”。
运行时错误较难以捕获,因为编程语法看上去正确,但代码在 VBA 尝试执行时失败。
例如,打开 Visual Basic 编辑器,并在宏中将 Value 属性名称更改为 ValueX,故意引入运行时错误,因为 Range 对象没有名为 ValueX 的属性。 返回到 Excel 文档,打开“宏”****对话框并再次运行 Macro1。 应该会看到 Visual Basic 消息框,该消息框解释运行时错误,文本为“对象不支持此方法属性。” 虽然文本内容很清楚,但仍可以单击“调试”了解详细信息。
当您返回到 Visual Basic 编辑器时,编辑器处于特定调试模式,即使用黄色突出显示失败的代码行。与预期的一样,突出显示了包括 ValueX 属性的行。
图 4:运行中的 Visual Basic 调试程序
可以对运行中的 VBA 代码进行更改,以将 ValueX 改回 Value,然后单击“调试”****菜单下的绿色小播放按钮。 程序应能够再次正常运行。
了解如何精心地使用调试器以获得更长、更复杂的程序是一个不错的主意。 至少,了解如何设置断点以在想要查看代码时停止执行、代码运行时如何添加监视点以查看不同变量和属性的值、以及如何逐行查看代码时。 这些选项在“调试”****菜单中均有提供,认真的调试器用户通常会记住相应的键盘快捷方式。
恰当使用参考材料

若要打开内建于 Office 帮助的开发人员参考,请通过单击功能区中的问号或按 F1 打开任何 Office 应用程序中的帮助参考。 然后,在“搜索”按钮右侧,单击下拉箭头以筛选内容。 单击“开发人员参考”。 如果在左面板中没有看到目录,请单击小书图标将其打开,然后从中展开对象模型参考。
图 5.开发工具帮助上的筛选功能适用于所有 Office 应用程序
开发工具帮助上的筛选功能适用于所有 Office 应用程序
浏览对象模型参考所花费的时间将得到回报。在你了解要使用的 Office 应用程序的 VBA 语法和对象模型的基础知识后,你的技能会得到提升,你将从主观猜测转变为按方法系统化编程。
当然,Microsoft Office 开发中心是一个提供文章、技巧和社区信息的出色门户。
搜索论坛和组

所有程序员都会时不时遇到困难,即使在阅读他们可以找到的每篇参考文章之后。他们晚上睡觉时会失眠,因为他们在思考解决问题的各种方法。幸运的是,Internet 促进了互相帮助以解决编程问题的开发人员社区的发展。
在网络上搜索“office 开发人员论坛”时会显示几个讨论组。您也可以搜索“office 开发”或问题描述来查找论坛、博客文章和文章。
如果您已为解决问题而竭尽全力,那么就不要害怕将您的问题张贴到开发人员论坛上。这些论坛欢迎来自较新程序员的帖子,并且许多有经验的开发人员都很乐于提供帮助。
下面是在向开发人员论坛中张贴内容时需遵守的几点规定:
在张贴之前,应在网站上查找 FAQ 或论坛成员希望您遵循的准则。确保所张贴的内容符合这些准则,并位于论坛的正确区域。
包括清楚的完整代码示例,如果您的代码是一长段代码的一部分,请考虑编辑您的代码以向其他人进行阐述。
清楚准确地描述您的问题,并概述您为解决此问题已经采取的所有步骤。花些时间尽力编写好的帖子,尤其在您慌乱或匆忙时。采用对首次阅读问题陈述的读者有意义的方式介绍情况。
要有礼貌,并表达您的感激之情。
进一步了解编程
虽然本文很短且只谈到 VBA 和编程的表面内容,但希望它能够为你提供足够的入门信息。
本节简单讨论一些较关键的主题。
变量

在本文提供的简单示例中,您处理的是应用程序已创建的对象。您可能希望创建自己的对象来存储值或对应用程序中临时使用的其他对象的引用。这些对象称为变量。
若要在 VBA 中使用变量,必须使用 Dim 语句告诉 VBA 变量所代表的对象类型。 然后,设置其值并用它来设置其他变量或属性。
VB.net

复制
Dim MyStringVariable As String
MyStringVariable = “Wow!”
Worksheets(1).Range(“A1”).Value = MyStringVariable
分支和循环

本文中的简单程序从上到下一次执行一行。编程的真正功能来自您必须根据指定的一个或多个条件确定要执行哪些代码行的选项。您可以进一步扩展这些功能,以便可以重复执行一项操作许多次。例如,下面的代码扩展了 Macro1。
VB.net

复制
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 应用程序:示例代码
下面是一些要尝试的脚本;每个脚本解决一个 Office 实际问题。
在 Outlook 中创建电子邮件

VB.net

复制
Sub MakeMessage()
Dim OutlookMessage As Outlook.MailItem
Set OutlookMessage = Application.CreateItem(olMailItem)
OutlookMessage.Subject = “Hello World!”
OutlookMessage.Display
Set OutlookMessage = Nothing
End Sub
请注意,有时你可能希望在 Outlook 中自动创建电子邮件;你也可以使用模板。
删除 Excel 工作表中的空行

VB.net

复制
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 i
End Sub
请注意,您可以选择一列单元格,然后运行此宏来删除所选列中具有空白单元格的所有行。
删除 PowerPoint 中的空文本框

VB.net

复制
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 中的联系人复制到 Word

VB.net

复制
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 中当前打开的联系人复制到打开的 Word 文档中。仅当 Outlook 中包含当前打开以供检查的联系人时,此代码才运行。
摘要
本文介绍 Office 中的 Visual Basic for Applications (VBA) 的功能以及 VBA 如何可以自动执行重复任务。

猜你喜欢

转载自blog.csdn.net/xfy0922/article/details/85287364