Excel VBA宏教程之初学者与实例

  • Share This
Michael Brown

本教程将使你走上学习Excel宏的道路。 你会发现如何在Excel中记录宏和插入VBA代码,将宏从一个工作簿复制到另一个工作簿,启用和禁用它们,查看代码,进行修改,以及更多。

对于Excel新手来说,宏的概念往往看起来难以逾越。 的确,要掌握VBA可能需要几个月甚至几年的培训。 然而,这并不意味着你不能立即利用Excel宏的自动化能力。 即使你是一个完全的VBA编程新手,你也可以轻松地录制一个宏来自动化一些重复的任务。

这篇文章是你进入迷人的Excel宏世界的切入点。 它涵盖了你需要知道的基本知识,并提供了相关的深入教程的链接。

    什么是Excel中的宏?

    Excel宏是一组以VBA代码形式存储在工作簿中的命令或指令。 你可以把它看作是一个执行预定义动作序列的小程序。 一旦创建,宏可以随时重复使用。 运行宏会执行它包含的命令。

    通常情况下,宏用于自动化重复性任务和日常工作。 熟练的VBA开发人员可以编写真正复杂的宏,远远超过减少击键的数量。

    很多时候,你可能会听到人们把 "宏 "称为 "VBA"。 从技术上讲,这是有区别的:宏是一段代码,而Visual Basic for Applications(VBA)是微软为编写宏而创造的编程语言。

    为什么要使用Excel宏?

    宏的主要目的是在更短的时间内完成更多的工作。 就像你使用公式来计算数字和处理文本字符串一样,你可以使用宏来自动执行频繁的任务。

    比方说,你要为你的主管创建一份周报。 为此,你从几个或更多的外部资源导入各种分析数据。 问题是,这些数据很乱,多余,或者不是Excel能理解的格式。 这意味着你需要重新格式化日期和数字,修剪多余的空格和删除空白,复制和粘贴信息到适当的列。构建图表以可视化趋势,并做更多不同的事情,使你的报告清晰和用户友好。 现在,成像所有这些操作都可以在鼠标点击中立即为你执行!这将是一个巨大的挑战。

    当然,建立一个复杂的宏需要时间,有时甚至比手动执行同样的操作要花更多的时间。 但是,创建一个宏是一次性的设置。 一旦编写、调试和测试,VBA代码将快速无误地完成工作,最大限度地减少人为错误和昂贵的错误。

    如何在Excel中创建一个宏

    有两种方法可以在Excel中创建宏--通过使用宏记录器和Visual Basic编辑器。

    提示:在Excel中,对宏的大多数操作是通过 开发商 选项卡,所以一定要把 "开发人员 "选项卡添加到你的Excel功能区。

    录制一个宏

    即使你对一般的编程,特别是VBA一无所知,只要让Excel把你的操作记录成一个宏,你就可以轻松地实现一些工作的自动化。 在你执行步骤的时候,Excel会密切关注并记下你的鼠标点击和VBA语言的击键。

    宏记录器几乎可以捕捉到你所做的一切,并产生一个非常详细的(通常是多余的)代码。 在你停止记录并保存宏之后,你可以在Visual Basic编辑器中查看其代码,并做一些小的修改。 当你运行宏时,Excel会回到记录的VBA代码,并执行完全相同的动作。

    要开始录音,请点击 记录巨集 的按钮。 开发商 选项卡或 状况 吧。

    详细情况请见如何在Excel中记录宏。

    在Visual Basic编辑器中编写一个宏

    Visual Basic for Applications (VBA)编辑器是Microsoft Excel保存所有宏的代码的地方,包括记录的和手动编写的。

    在VBA编辑器中,你不仅可以编写一连串的动作,还可以创建自定义函数,显示你自己的对话框,评估各种条件,最重要的是编写逻辑代码!自然,创建你自己的宏需要一些VBA语言的结构和语法知识,这超出了本教程的初学者范围。 但没有什么会防止你重复使用别人的代码(比如,你在我们的博客上发现的代码:),即使是一个完全的Excel VBA新手也应该没有任何困难

    首先,按Alt + F11打开Visual Basic编辑器。 然后,在这两个快速步骤中插入代码。

    1. 在左边的项目资源管理器中,右键单击目标工作簿,然后单击 插入 > 模块 .
    2. 在右边的代码窗口,粘贴VBA代码。

    完成后,按F5来运行宏。

    详细步骤请见如何在Excel中插入VBA代码。

    如何在Excel中运行宏

    在Excel中启动一个宏有几种方法。

    • 要从一个工作表中运行一个宏,请点击 巨集 上的按钮。 开发商 选项卡或按Alt + F8快捷键。
    • 要从VBA编辑器中运行一个宏,请按以下任一步骤。
      • F5来运行整个代码。
      • F8可以逐行浏览代码,这对测试和排除故障非常有用。

    此外,你可以通过点击自定义按钮或按指定的快捷键来启动一个宏。 完整的细节,请参见如何在Excel中运行宏。

    如何在Excel中启用宏程序

    由于安全原因,Excel中的所有宏都是默认禁用的。 因此,要想利用VBA代码的魔力为你服务,你需要知道如何启用它们。

    为一个特定的工作簿打开宏的最简单方法是,点击 启用内容 按钮,当你第一次打开带有宏的工作簿时,黄色的安全警告条出现在工作表的顶部。

    要了解更多关于宏的安全性,请看如何在Excel中启用和禁用宏。

    如何改变宏设置

    Microsoft Excel根据在 "宏 "中选择的宏设置来决定是否允许在你的工作簿中执行VBA代码。 信托中心 .

    以下是访问Excel宏设置的步骤,如果需要的话,可以对其进行修改。

    1. 转到 文件 选项卡,并选择 选择 .
    2. 在左侧窗格中,选择 信托中心 ,然后点击 信任中心设置... .
    3. 信托中心 对话框,点击 宏观设置 左边的 "选择",选择所需的选项,然后点击 认可 .

    在下面的屏幕截图中,选择了默认的宏设置。

    更多信息,请参见Excel宏设置解释。

    如何在Excel中查看、编辑和调试VBA代码

    对宏的代码的任何修改,无论它是由Excel宏记录器自动生成还是由你自己编写,都是在Visual Basic编辑器中进行的。

    要打开VB编辑器,可以按Alt + F11或者点击 视觉基础 上的按钮。 开发商 标签。

    查看和编辑 的特定宏的代码,在 项目探索者 左边的 "我的",双击包含它的模块,或者右击模块并选择 "我的"。 查看代码 打开 "代码 "窗口,你可以编辑代码。

    测试和调试 要退出调试模式,请点击F8键。 这将使你逐行浏览宏的代码,让你看到每一行对工作表的影响。 目前正在执行的行以黄色突出显示。 复位 工具栏上的按钮(蓝色方块)。

    如何复制一个宏到另一个工作簿

    你在一个工作簿中创建了一个宏,现在也想在其他文件中重新使用它? 在Excel中复制宏有两种方法。

    复制包含宏的模块

    如果目标宏驻留在一个单独的模块中,或者该模块中的所有宏对你有用,那么将整个模块从一个工作簿复制到另一个工作簿是有意义的。

    1. 打开两个工作簿--包含宏的工作簿和你想复制它的工作簿。
    2. 打开Visual Basic编辑器。
    3. 在 "项目资源管理器 "窗格中,找到包含宏的模块,将其拖到目标工作簿中。

    在下面的截图中,我们正在复制 模块1 第一册 第二册 :

    复制一个宏的源代码

    如果该模块包含许多不同的宏,而你只需要一个,那么就只复制该特定宏的代码。 具体方法如下。

    1. 打开两个工作簿。
    2. 打开Visual Basic编辑器。
    3. 在项目资源管理器窗格中,双击包含你想复制的宏的模块,打开其代码窗口。
    4. 在 "代码 "窗口中,找到目标宏,选择其代码(以""开头)。 并以 结束子程序 )并按Ctrl + C复制它。
    5. 在项目资源管理器中,找到目标工作簿,然后在其中插入一个新的模块(右击工作簿,点击 插入 > 模块 )或双击一个现有的模块来打开其代码窗口。
    6. 在目标模块的代码窗口,按Ctrl + V粘贴代码。 如果该模块已经包含一些代码,向下滚动到最后一行代码,然后粘贴复制的宏。

    如何删除Excel中的宏

    如果你不再需要某个VBA代码,你可以通过以下方式删除它 宏观 对话框或Visual Basic编辑器。

    从工作簿中删除一个宏

    要从Excel工作簿中直接删除一个宏,请执行以下步骤。

    1. 关于 开发商 选项卡,在 编码 组,点击 巨集 按钮或按Alt + F8快捷键。
    2. 宏观 对话框,选择你要删除的宏,然后点击 删除 .

    提示。

    • 要查看所有打开的文件中的所有宏,选择 所有开放的工作簿 巨集在 下拉列表。
    • 为了能够删除个人宏工作簿中的宏,你需要先取消隐藏Personal.xlsb。

    通过Visual Basic编辑器删除一个宏

    使用VBA编辑器的一个好处是,它可以让你一次性删除整个模块及其包含的所有宏。 另外,VBA编辑器允许删除个人宏工作簿中的宏,而不需要取消隐藏。

    为了永久地 删除一个模块 ,执行这些步骤。

    1. 项目探索者 ,右键单击该模块,并选择 移除 从上下文菜单中选择。
    2. 当被问及是否要在删除模块之前导出该模块时,请点击 没有 .

    删除一个特定的宏 或者,你可以通过使用以下方法删除一个宏 工具 VBA编辑器的菜单。

    1. 工具 菜单,选择 巨集 ...... 巨集 对话框会出现。
    2. 巨集 下拉列表,选择包含不需要的宏的项目。
    3. 巨集名称 框中,选择该宏。
    4. 点击 删除 按钮。

    如何在Excel中保存宏

    要保存Excel中的宏,无论是录制的还是手动编写的,只需将工作簿保存为启用的宏(*.xlms)。 下面是方法。

    1. 在包含该宏的文件中,点击 拯救 按钮或按Ctrl + S 。
    2. ǞǞǞ 另存为 会出现对话框。 选择 Excel Macro-Enabled 工作簿 (*.xlsm) 保存为类型 下拉列表,并点击 拯救 :

    如何在Excel中导出和导入宏

    如果你想和别人分享你的VBA代码,或者把它们移到另一台电脑上,最快的方法是把整个模块导出为一个.bas文件。

    导出宏

    要导出你的VBA代码,这是你需要做的。

    1. 打开包含宏的工作簿。
    2. 按Alt + F11打开Visual Basic编辑器。
    3. 在项目资源管理器中,右键单击包含宏的模块,选择 输出文件 .
    4. 导航到你想保存导出文件的文件夹,为文件命名,然后点击 拯救 .

    导入宏

    要将带有VBA代码的.bas文件导入你的Excel中,请按照以下步骤进行。

    1. 打开你想导入宏的工作簿。
    2. 打开Visual Basic编辑器。
    3. 在项目资源管理器中,右键单击项目名称,选择 进口文件 .
    4. 导航到.bas文件并点击 开放式 .

    Excel宏的例子

    学习Excel VBA的最好方法之一是探索代码样本。 下面你会发现一些非常简单的VBA代码的例子,这些代码可以实现一些基本操作的自动化。 当然,这些例子不会教你编码,为此有数百个专业级的VBA教程。 我们只是旨在说明VBA的一些常见功能,希望能使其理念对你更熟悉一些。你。

    取消隐藏工作簿中的所有工作表

    在这个例子中,我们使用 活跃的工作簿 对象来返回当前活动的工作簿和 对于每个 循环逐一浏览工作簿中的所有工作表。 对于每一个找到的工作表,我们设置 可见 财产,以 xlSheetVisible .

    Sub Unhide_All_Sheets() Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Visible = xlSheetVisible Next wks End Sub

    隐藏活动工作表或使其非常隐蔽

    要操作当前活动的工作表,请使用 活动表 这个样本宏改变了 可见 活动工作表的属性为 xlSheetHidden 要使工作表非常隐蔽,可将其设置为 可见 财产,以 xlSheetVeryHidden .

    Sub Hide_Active_Sheet() ActiveSheet.Visible = xlSheetHidden End Sub

    取消选定范围内的所有合并单元格的合并

    如果你想在一个范围而不是整个工作表上执行某些操作,可以使用 选择 例如,下面的代码将一次性取消选定范围内的所有合并单元格的合并。

    Sub Unmerge_Cells() Selection.Cells.UnMerge End Sub

    显示一个消息框

    要向你的用户显示一些信息,可以使用 MsgBox 下面是这样一个最简单形式的宏的例子。

    Sub Show_Message() MsgBox ( "Hello World!" ) End Sub

    在现实生活中的宏中,消息框通常用于信息或确认目的。 例如,在执行一个动作(在我们的例子中是取消合并单元格)之前,你会显示一个 是/否 如果用户点击 "是",所选单元格就会被取消合并。

    Sub Unmerge_Selected_Cells() Dim Answer As String Answer = MsgBox( "Are you sure you want to unmerge these cells?" , vbQuestion + vbYesNo, "Unmerge Cells" ) If Answer = vbYes Then Selection.Cells.UnMerge End If 结束Sub

    为了测试代码,选择一个或多个包含合并单元格的区域并运行宏。 将出现以下信息。

    下面是更复杂的宏的链接,这些宏将具有挑战性和耗时的任务自动化。

    • 从多个工作簿中复制工作表到一个工作簿的宏程序
    • 在Excel中复制工作表的宏程序
    • 在Excel中按字母顺序排列标签的宏程序
    • 不需要密码就能解除工作表保护的宏程序
    • 计算和总结有条件的彩色单元格的宏程序
    • 将数字转换成文字的宏程序
    • 隐藏除活动工作表外的所有工作表的宏程序
    • 取消隐藏床单的宏程序
    • 取消隐藏所有栏目的宏程序
    • 使床单非常隐蔽的宏程序
    • 删除活动页面中所有换行符的宏程序
    • 删除空白行的宏程序
    • 删除每隔一行的宏程序
    • 删除空白列的宏程序
    • 每隔一列插入的宏程序
    • 在Excel中进行拼写检查的宏
    • 将列转为行的宏程序
    • 在Excel中翻转列的宏程序
    • 设置打印区域的宏程序
    • 插入分页符的宏程序

    如何保护Excel宏

    如果你想防止你的宏被他人查看、修改或执行,你可以用密码保护它。

    锁定巨集以便查看

    为了保护你的VBA代码不被未经授权的人查看和编辑,请做到以下几点。

    1. 打开VBA编辑器。
    2. 在项目资源管理器中,右键单击你想锁定的项目,并选择 VBAProject属性...
    3. 项目属性 对话框,在 保护 选项卡,检查 锁定项目以便查看 框,输入两次密码,然后点击 认可 .
    4. 保存、关闭并重新打开你的Excel文件。

    当你试图在Visual Basic编辑器中查看代码时,会出现下面的对话框。 键入密码并点击确定。

    解锁宏 ,只要打开 项目属性 再一次在对话框中删除一个"√"。 锁定项目以便查看 箱子。

    注意:这种方法可以保护代码不被查看和编辑,但不能阻止它被执行。

    密码保护宏的运行

    为了保护你的宏不被执行,以便只有知道密码的用户才能运行它,请添加以下代码,用你的真实密码替换 "密码 "一词。

    Sub Password_Protect() Dim password As Variant password = Application.InputBox("Please enter Password" , "Password Protected Macro" ) Select Case password Case Is = False 'do nothing Case Is = "password" ' your code here Case Else MsgBox "Incorrect Password" End Select End Sub

    该宏使用 输入框 功能来提示用户输入密码。

    如果用户的输入与硬编码的密码相匹配,你的代码就会被执行。 如果密码不匹配,就会显示 "密码不正确 "的消息框。 为了防止用户在Visual Basic编辑器中偷看密码,记住要按照上面的解释锁定宏,以便查看。

    注意:鉴于网络上各种密码破解器的数量,必须认识到这种保护并不是绝对的。 你可以把它看作是对意外使用的保护。

    Excel宏提示

    Excel VBA专业人员已经设计了大量巧妙的技巧,使他们的宏更有效。 下面我将分享我最喜欢的几个。

      如果你的VBA代码主动操作单元格内容,你可以通过关闭屏幕刷新和公式重新计算来加快其执行速度。 在执行完你的代码后,再次打开这个功能。

      以下几行将被添加到你的代码的开头(在以""开头的行之后)。 点状 或在 线)。

      Application.ScreenUpdating = False Application.Calculation = xlCalculationManual

      以下几行将被添加到你的代码的末尾(在 结束子程序 ):

      Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic

      如何将VBA代码分成多行

      在VBA编辑器中编写代码时,有时你可能会创建非常冗长的语句,因此你必须水平滚动来查看该行的结尾。 这并不影响代码的执行,但使检查代码变得困难。

      要把一个长的语句分成几行,可以输入一个 空间 然后是一个 强调 (在VBA中,这被称为"_",即在你想要断行的地方。 续行符 .

      为了正确地在下一行继续编写代码,请遵循这些规则。

      • 不要在参数名称的中间分割代码。
      • 不要使用下划线来中断注释。 对于多行注释,在每行的开头输入一个撇号(')。
      • 下划线必须是一行中的最后一个字符,后面不能有其他字符。

      下面的代码示例显示了如何将该语句分成两行。

      Answer = MsgBox( "Are you sure you want to unmerge these cells?" , _ vbQuestion + vbYesNo, "Unmerge Cells" )

      如何使一个宏能够从任何工作簿中访问

      当你在Excel中编写或记录一个宏时,通常只能从那个特定的工作簿中访问。 如果你想在其他工作簿中重复使用相同的代码,请将其保存到个人宏工作簿中。 这将使你在任何时候打开Excel时都能使用该宏。

      唯一的障碍是,个人宏工作簿在Excel中默认不存在。 要创建它,你需要至少记录一个宏。 以下教程提供了所有细节:Excel中的个人宏工作簿

      如何撤销一个宏操作

      执行宏后,不能通过按Ctrl+Z或点击Ctrl+Z来恢复其动作。 撤销 按钮。

      当然,有经验的VBA程序员可以在允许宏对工作表进行任何修改之前验证输入值和/或起始条件,但在大多数情况下这是相当复杂的。

      一个更简单的方法是在宏的代码中保存活动的工作簿。 为此,只需在让你的宏做其他事情之前添加下面这一行。

      ActiveWorkbook.Save

      你也可以选择显示一个消息框,告知用户在执行宏的主代码之前已经保存了当前工作簿。

      这样,如果你(或你的用户)对结果不满意,你可以简单地关闭,然后再重新打开工作簿。

      当工作簿中没有宏时,阻止Excel显示安全警告

      你是否曾发现自己处于这样一种情况:Excel不断询问你是否要启用宏,而你肯定知道这个特定工作簿中没有宏?

      最有可能的原因是,一些VBA代码被添加后又被删除,留下了一个空的模块,从而触发了安全警报。 要摆脱它,只需删除该模块,保存工作簿,关闭并重新打开它。 如果这没有帮助,请做以下工作。

      • 对于 这本工作手册 并为每个单独的工作表,打开代码窗口,按Ctrl + A选择所有的代码并删除它(即使代码窗口看起来是空的)。
      • 删除工作簿中包含的任何UserForms和Class Modules。

      这就是在Excel中创建和使用VBA宏的方法。 感谢你的阅读,希望下周能在我们的博客上再次见到你!

      Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.