如何在 Excel 中保存 VBA 宏并使其在所有工作簿中都能使用?
在许多场景中,您可能需要在不同的 Excel 工作表中反复使用相同的 VBA 宏,例如自动化重复计算、格式化数据,或调用自定义函数(如将数字转换为中文大写)。然而,默认情况下,宏仅保存于创建它的当前工作簿中,导致您无法在新建文档中直接访问或复用这些宏。所幸,Excel 提供了多种灵活的方法,让 VBA 宏实现全局可用,省去每次新建工作簿时重复复制代码的麻烦。本教程将全面介绍这些方法,助您轻松在所有工作簿中调用 VBA 宏,显著提升工作效率与操作流畅度。

例如,假设您希望使用自定义 VBA 代码将数字转换为对应的英文单词,并确保无论在哪个工作簿中都能随时调用此功能。通过正确的方法,您可以将 VBA 模块保存为全局可用,从而在 Excel 中随时随地复用。这对于需要频繁使用的自定义函数或自动化任务尤为实用,无需在多个文件中重复粘贴代码。
为此,您可以将 VBA 代码打包为自定义 Excel 加载项。启用后,您的自定义功能将以全局函数的形式在 Excel 中随时可用。
请按以下步骤操作:
1. 在 Excel 中按下 Alt + F11,即可打开“Microsoft Visual Basic for Applications”窗口。
2. 在 VBA 编辑器中,单击插入> 模块,并将以下宏代码粘贴到新建的模块窗口中。
VBA 代码:转换小写金额转大写
Function NumberstoWords(ByVal MyNumber)
'Update by ExtendofficeDim xStr As StringDim xFNum As IntegerDim xStrPointDim xStrNumberDim xPoint As StringDim xNumber As StringDim xP() As VariantDim xDPDim xCnt As IntegerDim xResult, xT As StringDim xLen As IntegerOn Error Resume NextxP = Array("", "Thousand ", "Million ", "Billion ", "Trillion ", " ", " ", " ", " ")
xNumber = Trim(Str(MyNumber))
xDP = InStr(xNumber, ".")
xPoint = ""
xStrNumber = ""
If xDP >0 ThenxPoint = " point "
xStr = Mid(xNumber, xDP +1)
xStrPoint = Left(xStr, Len(xNumber) - xDP)
For xFNum =1 To Len(xStrPoint)
xStr = Mid(xStrPoint, xFNum,1)
xPoint = xPoint & GetDigits(xStr) & " "
Next xFNumxNumber = Trim(Left(xNumber, xDP -1))
End IfxCnt =0xResult = ""
xT = ""
xLen =0xLen = Int(Len(Str(xNumber)) /3)
If (Len(Str(xNumber)) Mod3) =0 Then xLen = xLen -1Do While xNumber <> ""
If xLen = xCnt ThenxT = GetHundredsDigits(Right(xNumber,3), False)
ElseIf xCnt =0 ThenxT = GetHundredsDigits(Right(xNumber,3), True)
ElsexT = GetHundredsDigits(Right(xNumber,3), False)
End IfEnd IfIf xT <> "" ThenxResult = xT & xP(xCnt) & xResultEnd IfIf Len(xNumber) >3 ThenxNumber = Left(xNumber, Len(xNumber) -3)
ElsexNumber = ""
End IfxCnt = xCnt +1LoopxResult = xResult & xPointNumberstoWords = xResultEnd FunctionFunction GetHundredsDigits(xHDgt, xB As Boolean)
Dim xRStr As StringDim xStrNum As StringDim xStr As StringDim xI As IntegerDim xBB As BooleanxStrNum = xHDgtxRStr = ""
On Error Resume NextxBB = TrueIf Val(xStrNum) =0 Then Exit FunctionxStrNum = Right("000" & xStrNum,3)
xStr = Mid(xStrNum,1,1)
If xStr <> "0" ThenxRStr = GetDigits(Mid(xStrNum,1,1)) & "Hundred "
ElseIf xB ThenxRStr = "and "
xBB = FalseElsexRStr = " "
xBB = FalseEnd IfEnd IfIf Mid(xStrNum,2,2) <> "00" ThenxRStr = xRStr & GetTenDigits(Mid(xStrNum,2,2), xBB)
End IfGetHundredsDigits = xRStrEnd FunctionFunction GetTenDigits(xTDgt, xB As Boolean)
Dim xStr As StringDim xI As IntegerDim xArr_1() As VariantDim xArr_2() As VariantDim xT As BooleanxArr_1 = Array("Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen ")
xArr_2 = Array("", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety ")
xStr = ""
xT = TrueOn Error Resume NextIf Val(Left(xTDgt,1)) =1 ThenxI = Val(Right(xTDgt,1))
If xB Then xStr = "and "
xStr = xStr & xArr_1(xI)
ElsexI = Val(Left(xTDgt,1))
If Val(Left(xTDgt,1)) >1 ThenIf xB Then xStr = "and "
xStr = xStr & xArr_2(Val(Left(xTDgt,1)))
xT = FalseEnd IfIf xStr = "" ThenIf xB ThenxStr = "and "
End IfEnd IfIf Right(xTDgt,1) <> "0" ThenxStr = xStr & GetDigits(Right(xTDgt,1))
End IfEnd IfGetTenDigits = xStrEnd FunctionFunction GetDigits(xDgt)
Dim xStr As StringDim xArr_1() As VariantxArr_1 = Array("Zero ", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine ")
xStr = ""
On Error Resume NextxStr = xArr_1(Val(xDgt))
GetDigits = xStrEnd Function 3. 现在,点击窗口左上角的“保存”图标,或直接按 Ctrl + S 即可打开“另存为”对话框。
4. 在“另存为”窗口的“文件名”字段中输入所需文件名,并在“指定保存格式”下拉菜单中务必选择 Excel 加载项(*.xlam)。
5. 单击“保存”按钮,将工作簿另存为 Excel 加载项文件,即可创建一个可随时在任意工作簿中启用的可复用加载项。
6. 保存后,请返回 Excel 并关闭刚刚转换为加载项的工作簿。
7. 打开一个新工作簿或现有工作簿(您希望在其中使用该宏),然后在相应单元格(例如 B2)中输入自定义公式:
=NumberstoWords(A2) 
转到开发工具选项卡,单击“加载项”组中的 Excel 加载项按钮。
9. 在弹出的“加载项”对话框中,单击浏览。
10. 找到并选择之前保存的加载项文件,然后单击确定。
11. 您的自定义加载项(例如“数字转文字加载项”)现在应已出现在加载项列表中。请确保其已勾选,然后单击确定以启用它。
12. 现在,在目标单元格(如 B2)中再次输入自定义函数,然后按 Enter,即可看到公式返回该数字对应的正确英文单词。
=NumberstoWords(A2) 13. 要快速将转换公式应用到多个数字,请向下拖动单元格的自动填充柄,将函数复制到其他单元格中。

提示与注意事项:
- 将宏保存为加载项后,您便可在所有工作簿中使用相同的自定义函数、代码或自动化功能,省时高效,确保一致性。
- 如果 Excel 关闭或稍后禁用了该加载项,其中的函数可能会暂时显示“#NAME?”,直到重新加载该加载项为止。为避免混淆,请确保在需要时始终通过加载项管理器启用该加载项。
- 部分用户默认可能看不到“开发工具”选项卡。要启用它,请右键单击功能区,选择“自定义功能区”,然后勾选“开发工具”选项。
- 建议将加载项存储在永久性文件夹中,以免因文件移动或重命名而丢失引用。
如果您更倾向于手动运行代码,这也是可行的,尤其在调试或临时使用时非常有帮助:
- 您可以将宏添加到快速访问工具栏,实现一键执行,适用于所有可见工作簿。操作方法:右键单击快速访问工具栏,选择“自定义快速访问工具栏”,然后添加您的宏。

- 您也可以按 Alt + F11 打开 VBA 编辑器,手动选择您的宏,然后按 F5 即可按需运行代码。
优点:此方案可让您创建并共享功能丰富、可重复使用的宏,只要加载项已启用,这些功能将始终可用。
缺点:用户需手动加载该加载项;若需共享工作簿,还须一并提供加载项文件及函数说明。此外,加载项不支持在 Excel Online 中使用。
另一种极为实用的方法是使用个人宏工作簿(PERSONAL.XLSB),让您的常用或最爱宏在每次 Excel 会话中随时可用,无论打开哪个工作簿。这是一个特殊的隐藏 Excel 文件,每次启动 Excel 时都会自动加载,其中存储的所有宏均可在所有打开的工作簿中直接调用。
适用场景:适用于个人自动化、常规格式化脚本,或无需作为正式 Excel 加载项共享的实用函数。PERSONAL.XLSB 中的宏在您的电脑上始终可用,不受当前打开文件的影响。
优点:宏将保存在您的本地 Excel 配置文件中,全局可用,无需安装加载项或额外文件。
缺点:此类宏仅在存在 PERSONAL.XLSB 文件的计算机和账户上可用;与他人共享时,需手动导出并导入模块。
- 在使用此方法前,请先录制或创建一个宏,并确保将其保存至个人宏工作簿中。
请按以下步骤操作:
- 打开 Excel。在视图选项卡中,点击宏,然后点击录制宏。
- 在弹出的对话框中,于“将宏保存在”下拉菜单中选择个人宏工作簿。录制完成后(如无需操作,可立即停止)。
- 按下 Alt + F11 进入 VBA 编辑器,您将看到名为 PERSONAL.XLSB 的项目。在此插入新模块或粘贴所需的宏代码即可。
- 保存更改。Excel 将自动在启动文件夹中创建并维护 PERSONAL.XLSB 工作簿。
- 随后,即可通过宏对话框(Alt + F8)、分配给对象的功能区工具栏按钮,或从 VBA 中调用 PERSONAL.XLSB 中的宏。
故障排除与维护:如果 PERSONAL.XLSB 中的宏不可用,请检查 Excel 是否以安全模式启动,或宏安全设置是否设为“禁用所有宏”。此外,PERSONAL.XLSB 默认为隐藏状态;若不慎关闭未保存或误删该文件,只需重新录制一个宏即可自动重新生成。
C:\Users\[YourUserName]\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB用于在 Excel 中列出所有加载项的 VBA 代码
在 Excel 中,您可能会添加一些加载项以更高效地处理数据。众所周知,我们可以通过“选项”窗口查看所有加载项,但有没有办法将它们直接列在工作表中?本教程提供了一段 VBA 代码,助您轻松实现这一目标!
如何在打开或关闭工作簿时运行 VBA 宏?
本文将教您如何在每次打开或关闭工作簿时自动运行 VBA 代码。
如何保护/锁定 Excel 中的 VBA 代码?
就像您可以使用密码保护工作簿和工作表一样,也可以为 Excel 中的宏设置密码加以保护。
如何在 Excel 中运行 VBA 宏后添加时间延迟?
在某些情况下,您可能需要在触发 VBA 宏后设置计时延迟。例如,单击运行指定宏后,需等待 10 秒才生效。本文将为您介绍实现该功能的实用方法。
最佳办公效率工具
| 🤖 | KUTOOLS AI 助手:基于以下内容革新数据分析:智能执行 | 生成代码| 创建自定义公式 | 数据分析及生成图表| 调用 Kutools Functions…… |
| 热门功能:查找、高亮或标记重复项 | 删除空白行 | 合并列或单元格且不丢失数据 | 不使用公式的四舍五入…… | |
| 高级 LOOKUP:多条件 VLookup | 多值 VLookup | 跨多工作表 VLookup | 模糊查找…… | |
| 高级下拉列表:快速创建下拉列表 | 级联下拉列表 | 多选下拉列表…… | |
| 列管理器:添加指定数量的列|移动列|切换隐藏列的可见性状态|比较区域与列…… | |
| 特色功能:网格聚焦 | 设计视图 |增强编辑栏 | 工作簿和表管理器 | 资源库(自动文本)| 日期提取 | 汇总工作表 | 加密/解密单元格 | 按列表发送邮件 | 超级筛选 | 特殊筛选(筛选粗体单元格/斜体/删除线……) ...... | |
| 精选 15 工具集:12 文本工具(添加文本,删除特定字符,……)| 50+ 图表 类型(甘特图,……)| 40+ 实用公式(基于生日计算年龄,……)| 19 插入工具(插入二维码,从路径插入图片,……)| 12 转换工具(小写金额转大写,汇率转换,……)| 7 合并和拆分工具(高级合并行,分割单元格,……)|……更多 |
使用 Kutools for Excel 大幅提升您的 Excel 技能,体验前所未有的高效。Kutools for Excel 提供 300 多项高级功能,助您提升生产力、节省时间。立即点击此处,获取您最需要的功能……
Office Tab 为 Office 带来标签式界面,让您的工作更轻松
- 在 Word、Excel、PowerPoint、Publisher、Access、Visio 和 Project 中启用标签式编辑和阅读。
- 在同一个窗口的新标签页中打开并创建多个文档,而非在新窗口中。
- 将您的工作效率提升 50%,每天减少数百次鼠标点击!
所有 Kutools 插件,一个安装程序
Kutools for Office 套件捆绑了适用于 Excel、Word、Outlook 和 PowerPoint 的插件以及 Office Tab Pro,非常适合需要跨多个 Office 应用高效协作的团队。
- 一体化套件— Excel、Word、Outlook 和 PowerPoint 插件 + Office Tab Pro
- 一个安装程序,一个许可证— 几分钟内完成设置(支持 MSI)
- 协同效果更佳— 在多个 Office 应用中实现高效协同
- 30 天全功能试用— 无需注册,无需信用卡
- 超值之选— 比单独购买插件更省钱
