_如果您构建了一个包含Excel自定义函数的加载项,则可能会发现,尽管这些函数在Excel工作表中可以正常工作,但是您不能在其他工作簿的VBA过程中使用它们。好像Visual Basic编辑器看不到它们。好吧,那是因为不能!本文介绍了如何解决此问题。_首先,请考虑这是否真的是您想要做的。

加载项主要用于向工作簿添加其他功能。加载Excel加载项时,其功能将立即对所有工作簿可用。如果创建依赖于另一个工作簿中包含的自定义功能的VBA过程,则每当要使用其功能时,都必须打开该另一个工作簿。加载项中的自定义功能也是如此。如果加载了外接程序,那很好,但是假设您将工作簿邮寄给其他人,或者将其分发到您的工作组。您还必须记住要分发加载项。在工作簿代码中包含该函数的副本可能会更简单,以便您的过程可以直接访问它(您可能需要将其设置为_Private Function_或更改其名称以避免命名冲突)。

我并不是说不这样做。您只需要先考虑一下,如果确定可以使用该加载项,请继续。这是…​

问题何时出现?

我正在为其中一本工作簿编写一个过程。在我的过程中,我想使用我不久前创建并保存在_Martin的Functions_加载项中的_RemoveSpaces_函数,该函数当前已安装在我的Excel副本中。但是,当我尝试运行过程时,出现错误。

Visual Basic编辑器的行为好像该函数不存在,但是我知道它确实存在,并且如果我查看加载项中的代码,就可以看到它。实际上,如果我从外接程序内部运行代码,则该代码可以正常工作。

我需要Visual Basic编辑器能够从_different_工作簿的代码模块内部“查看”加载项中的功能。

给您的外接程序提供一个VBA项目名称每个工作簿都有一个VBA项目名称。它称为_VBAProject_。您可以根据需要更改该名称,但是通常我不会打扰,因为通常这并不重要。

您是否曾经想过,为什么在可视化基本编辑器的_Project Explorer_窗格中显示的所有工作簿都称为“ VBAProject”?如果您安装了Microsoft的任何外接程序,则会看到它们具有不同的名称。 Microsoft开发人员已将其_Analysis ToolPak_加载项指定为VBA项目名称“ funcres”。

首先要做的是为您的加载项赋予唯一的VBA项目名称。

这是因为您将在下一步中使用该名称来引用它,如果有多个相同的名称,Visual Basic编辑器将不知道使用哪个名称。

在_Project Explorer_窗格中,选择您的加载项的名称。如果尚未打开,则显示Visual Basic编辑器的_Properties Window_。您将看到只有一个属性_Name_。输入其他名称,然后按Enter。您将必须遵守VBA的常规命名规则(即没有非法字符和空格)。您将看到该名称立即在_Project Explorer_中应用。

现在将更改保存到您的加载项。确保在_Project Explorer_中选择了您的加载项,然后选择“文件”>“保存”。

设置对外接程序的引用在这一步中,您告诉要使用外接程序功能的工作簿中存在外接程序。您可以通过_设置外接程序的引用_来实现。如果您想编写Excel代码以与另一个程序(例如_Outlook_或_Access_)进行通信,则可能已经接触过此技术。

如果方便,请在此时重新启动Excel。这是因为您重命名的加载项将被重新加载,并且您将要看到的列表将被刷新。如果不方便,请不要打扰…​阅读下一段,然后决定要做什么。

在要使用插件功能的工作簿中打开一个代码模块,然后转到“工具”>“引用”以打开“引用”对话框,您将在其中看到所有库和其他对象(如插件)的列表。您可以设置参考。如果您重新启动了Excel,则此列表将被刷新,并且您将能够找到在最后一步中给外接程序指定的项目名称。在名称旁边的方框中打勾,然后单击“确定”按钮。

如果您没有重新启动Excel,则必须通过单击“引用”对话框上的“浏览”按钮来找到您的加载项文件。这将打开“添加引用”窗口。将“文件类型:”部分更改为_Microsoft Excel Files(.xls; .xla)_,然后浏览到存储外接程序的文件夹。

选择您的加载项,然后单击打开。这会将您的加载项添加到列表中,您可以在其中选择它并单击“确定”。

注意:您不必同时执行这两个步骤!根据更改外接程序的VBA项目名称后是否重新启动Excel,选择一个或另一个。

现在,您将可以在工作簿中设置引用的任何模块中使用外接程序的功能,并且它们将被Visual Basic编辑器识别…​

如果查看_Project Explorer_,您将看到对该工作簿已应用了引用…​

重要的是要记住,添加参考仅适用于执行此过程的工作簿。您将需要为每个要使用外接程序功能的不同工作簿执行此操作。

关于分发文件当您添加对加载项的引用时,指向该加载项的链接是“硬连线”到文件中的。如果您将文件移动到另一台计算机上,或将其分发给您的同事,则工作簿将期望在他们的计算机上的同一位置找到相同的加载项。另外,如果从计算机中移动或删除了外接程序,则工作簿将无法找到它,并且您的代码将无法工作。

有人主张该文件及其关联的加载项应始终位于同一文件夹中,以避免出现此问题。当然,您可以再次设置参考来解决该问题。

考虑到这些因素,您就不会有问题。