跳至主要内容

如何在 Excel 的所有工作簿中保存并使用您的 VBA 宏?

Author: Zhoumandy Last Modified: 2025-07-31

在许多情况下,您可能需要在不同的 Excel 工作簿中反复使用相同的 VBA 宏,以完成诸如自动化重复计算、数据格式化或自定义函数(如将数字转换为大写金额)等任务。一个常见的挑战是,默认情况下,宏仅存储在创建它们的工作簿中,这意味着您无法轻松地在新文档中访问或重用它们。然而,Excel 提供了几种灵活的方法,可以让 VBA 宏全局可用,从而无需每次启动新工作簿时都重新复制代码。本教程提供了多种方法的详细说明,确保您的 VBA 宏可以轻松地跨所有工作簿使用,提高您的生产力和工作流程效率。

A screenshot showing the Add-ins dialog in 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 打开“另存为”对话框。
A screenshot showing the Save option in the VBA window

4. 在“另存为”窗口中,在“文件名”字段中输入所需的文件名。对于“保存类型”下拉菜单,请务必选择 Excel 加载项 (*.xlam).
A screenshot showing the Save As dialog box with the selection of Excel Add-in (*.xlam) as the save type

5. 点击“保存”按钮,将您的工作簿保存为 Excel 加载项文件。这样就创建了一个可随时在任何工作簿中启用的可重复使用的加载项。
A screenshot showing the workbook saved as an Excel Add-in

6. 保存完成后,返回 Excel 并关闭刚刚转换为加载项的工作簿。

7. 打开一个新的或现有的工作簿,在您想使用宏的地方输入自定义公式(例如,在 B2 单元格):

=NumberstoWords(A2)
注意:此时可能会出现“#NAME?”错误。这是正常的,因为包含宏功能的加载项尚未被全局加载到 Excel 中。请按照以下步骤启用您的宏,使其在所有工作簿中可用。
A screenshot of the #NAME? error before applying the saved VBA macro

8. 转到 开发工具 选项卡,然后点击 Excel 加载项 按钮,位于“加载项”组中。
A screenshot showing the Add-ins option under the Developer tab in Excel

9. 在弹出的“加载项”对话框中,选择 浏览.
A screenshot of the Add-ins dialog box in Excel

10. 找到并选择您之前保存的加载项文件,然后点击 确定.
A screenshot showing the selection of a custom Add-in file in Excel

11. 您的自定义加载项(如“将数字转换为单词的加载项”)现在应该出现在加载项列表中。确保选中它,然后点击 确定 以启用它。
A screenshot showing the custom add-in the Add-ins dialog box in Excel

12. 现在,在目标单元格(如 B2)中再次输入自定义函数,然后按 Enter 键。您应该会看到公式返回正确的英文单词形式的数字。

=NumberstoWords(A2)

13. 若要快速将转换公式应用到多个数字,请向下拖动单元格的自动填充柄,将函数复制到其他单元格。

A screenshot showing the final result of the converted numbers to words

提示与注意事项:

  • 将宏保存为加载项后,您可以在所有工作簿中使用相同的自定义函数、代码或自动化功能,节省时间并提高一致性。
  • 如果 Excel 关闭或加载项被禁用,加载项中的函数可能会暂时显示“#NAME?”,直到再次加载加载项为止。为避免混淆,请确保在需要时始终在加载项管理器中启用加载项。
  • 一些用户默认可能看不到“开发工具”选项卡。要启用它,请右键单击功能区,选择“自定义功能区”,然后勾选“开发工具”选项。
  • 最好将加载项存储在一个永久文件夹中,以免因文件移动或重命名而导致引用丢失。

如果您更喜欢手动运行代码,这也是可行的,有时在调试或临时使用时非常有用:

  1. 您可以将宏分配到快速访问工具栏,以便在任何可见工作簿中一键执行。为此,请右键单击快速访问工具栏,选择“自定义快速访问工具栏”,然后添加您的宏。
    A screenshot showing how to add the VBA macro to the Quick Access Toolbar
  2. 您也可以按 Alt + F11 打开 VBA 编辑器,手动选择您的宏,然后按 F5 键根据需要运行代码。

优点: 此解决方案允许您创建和共享丰富的、可重复使用的宏功能,只要加载项已启用,这些功能就会一直正常工作。
缺点: 用户必须记住加载加载项,并且如果共享工作簿,还必须共享加载项文件和功能详情。此外,加载项无法在 Excel Online 中使用。


个人宏工作簿方法

另一种非常实用的方法是,确保您最常用或最喜欢的宏在每次 Excel 会话中都可用,无论哪个工作簿处于打开状态,就是使用个人宏工作簿(PERSONAL.XLSB)。这是一个特殊的隐藏 Excel 文件,每次启动 Excel 时都会自动加载,从而使其中存储的任何宏都可以在所有打开的工作簿中访问。

适用场景:适用于个人自动化、日常格式化脚本或不需要作为正式 Excel 加载项共享的实用函数。PERSONAL.XLSB 中的宏无论打开哪个文件,都可以在您的计算机上使用。

优点: 宏对您的本地 Excel 配置文件全局可用,无需安装加载项或额外文件。
缺点: 以这种方式存储的宏只能在存在 PERSONAL.XLSB 的计算机和账户上使用。与他人共享需要手动导出和导入模块。

  • 要使用此方法,首先需要录制或创建一个宏,并确保将其保存到个人宏工作簿中。

请按照以下步骤操作:

  1. 打开 Excel。在“视图”选项卡中,点击“”,然后选择“录制宏”。
  2. 在弹出的对话框中,在“存储宏于”下选择“个人宏工作簿”。完成录制(如果不需要,可以立即停止录制)。
  3. Alt + F11 进入 VBA 编辑器,您将在其中看到一个名为 PERSONAL.XLSB 的项目。在这里,插入一个新模块或将所需的宏代码粘贴进去。
  4. 保存更改。Excel 会自动在其启动文件夹中创建并维护 PERSONAL.XLSB 工作簿。
  5. PERSONAL.XLSB 中的宏可以通过对话框(Alt + F8)运行,也可以分配给功能区或工具栏按钮,或从 VBA 中调用。

故障排除与维护:如果 PERSONAL.XLSB 中的宏不可用,请检查 Excel 是否以安全模式打开,或者宏安全设置是否设置为“禁用所有宏”。此外,PERSONAL.XLSB 默认是隐藏的;如果不小心未保存或删除了它,您可能需要重新录制一个宏来重新生成它。

提示: 定期备份您的 PERSONAL.XLSB 文件。您可以在系统配置文件夹中找到它,常见路径为:
C:\Users\[YourUserName]\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB

其他操作(文章)

列出 Excel 中所有加载项的 VBA 代码
在 Excel 中,您可能添加了一些加载项以更好地处理数据。我们知道,可以进入“选项”窗口查看所有加载项,但是否有办法将所有加载项列在一个工作表中呢?现在,在本教程中,提供了一个用于列出 Excel 中所有加载项的 VBA 代码。

如何在打开或关闭工作簿时运行 VBA 宏?
在本文中,我将告诉您如何在每次打开或关闭工作簿时运行 VBA 代码。

如何在 Excel 中保护/锁定 VBA 代码?
正如您可以使用密码保护工作簿和工作表一样,您还可以设置密码来保护 Excel 中的宏。

如何在 Excel 中运行 VBA 宏后设置时间延迟?
在某些情况下,您可能需要设置一个计时器延迟来触发 Excel 中的 VBA 宏。例如,当点击运行某个指定的宏时,它将在10秒后生效。本文将向您展示一种实现此功能的方法。

最佳 Office 办公效率工具

🤖 Kutools AI 助手:基于智能执行,彻底革新数据分析 生成代码创建自定义公式分析数据并生成图表调用 Kutools Functions
热门功能:查找、选中项的背景色或标记重复项|删除空行|合并列或单元格且不丢失数据|四舍五入(无公式)...
高级 LOOKUP多条件查找 (VLookup)多值查找 (VLookup)多表查找 (VLookup Across Multiple Sheets)模糊查找 (Fuzzy Lookup)...
高级下拉列表快速创建下拉列表依赖型下拉列表多选下拉列表...
列管理器添加指定数量的列移动列切换隐藏列的可见状态比较区域及列...
特色功能网格聚焦设计视图增强编辑栏工作簿 & 工作表管理器资源库(自动文本)|日期提取合并数据加密/解密单元格按列表发送电子邮件超级筛选特殊筛选(筛选粗体/倾斜/删除线等)...
热门15 大工具集12 款文本工具添加文本删除特定字符等)50+ 种图表 类型甘特图等)40+ 实用公式基于生日计算年龄等)19 款插入工具插入二维码按路径插入图片等)12 种转换工具小写金额转大写汇率转换等)7 款合并与分割工具高级合并行分割单元格等)...更多精彩等你发现
使用 Kutools,支持您的首选语言——包括英语、西班牙语、德语、法语、中文及40 多种其他语言!

用 Kutools for Excel 加速你的 Excel 技能,体验前所未有的高效办公。 Kutools for Excel 提供300 多项高级功能,助您提升效率,节省大量时间。点击此处,获取你最需要的功能...


Office Tab 为 Office 带来标签式界面,让你的工作更加轻松

  • 在 Word、Excel、PowerPoint 启用标签式编辑和阅读
  • 在同一窗口的新标签中打开和创建多个文档,无需新建窗口。
  • 办公效率提升50%,每天帮你减少上百次鼠标点击!