Excel VBA 小技巧 -- 如何使录制的宏通用化
- 2026-11-09 08:27:40
Excel VBA 小技巧 -- 如何使录制的宏通用化有朋友问到:我在当前工作表录制的宏能用到其他工作表吗? 对这个问题的回答是:一般来说不能,但在两种情况下是可能的。 第一种情况:相同工作表。 如果其他工作表与当前录制宏的工作表相同,则是可以应用的。但这种情况极为罕见,更多的是第二种情况。 第二种情况:将宏通用化。 针对某个工作表录制的宏,里面会有一些对特定的行、列或单元格的引用。工作表不同,一般来说表格结构也不同,所以对某个工作表有效的行、列或单元格的引用,是不能应用于其他工作表的。所谓将宏通用化,就是把对这些特定行、列或单元格的引用参数化,不同工作表体现为不同的行、列或单元格的参数。只要提供不同的参数,就可以应用于不同的工作表。 下面通过两个例子来说明将宏通用化的做法。 例1. 冻结表头 
图1 冻结表头 这是一个非常简单的表格,表头只有一行。录制冻结表头的宏,并命名为 FreezeHeadings,一般来说最后体现为下面的 VBA 代码: 要想让这个宏能够应用于冻结任意表头,就要将 Range("2:2") 中的 2 参数化,由用户输入表头所占的行数,代码如下: 一般来说,不同的表格结构主要体现在表头上。冻结表头的意义在于翻页时表头不会消失,只要将表头所占用的行冻结住即可。用户只要输入一个表头所占行数的参数,就可以将冻结表头的宏应用于各个工作表。 例2. 格式化表格
图2 格式化表格 现在要将左图的表格做一下美化,使其成为右图的样子。 例1非常简单,用户只需要提供一个参数即可。这个美化表格的例子就比较复杂了,不仅需要表头参数,还需要表体的参数,不仅需要行数,还需要列数。 仔细分析录制的宏,要美化这个表格,需要以下参数: 如果还是利用 InputBox 提供参数的话,因为 InputBox 只有一个输入框,就需要将以上参数编排为以下结构: 第一个 RS:RE 结构表示表头的 起始行:结束行,第二个 RS:RE 表示表体的 起始行:结束行,CS:CE 表示起始列:结束列。 参数输入如下图所示: 
图3 表格格式化宏的参数输入 用这些参数格式化图2左侧表格,结果如下: 
图4 表格格式化结果 表格格式化宏 FormatTable 的代码如下: 
图5 FormatTable - 1 这段代码用于获取用户输入的参数,并对参数进行检查和解析。 
图6 FormatTable - 2 这段代码主要是设置表头行高、表体行高,以及对整个表格进行格式化。 
图7 FormatTable - 3 这段代码设置表头的对齐方式、背景颜色、字体等。

Sub FreezeHeadings()Rows("2:2").SelectActiveWindow.FreezePanes =TrueEnd Sub
Sub FreezeHeadings()Dim headingRows As LongDim freeRow As LongDoheadingRows = InputBox("请输入表头所占行数:")Loop Until headingRows >0freeRow = headingRows +1Rows(freeRow & ":" & freeRow).SelectActiveWindow.FreePanes =TrueEnd Sub
![]() | ![]() |
表头:起始行:结束行 表体:起始行:结束行 表头区域:起始单元格:结束单元格 表格区域:起始单元格:结束单元格
RS:RE,RS:RE,CS:CE




本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。

