五年后,但这是我在 Google 上搜索“Access 2007 自定义加载项”时所有 Stack Exchange 上出现的唯一内容,所以也许其他搜索该内容的人想知道我发现了什么。
我不知道这是否适合原始提问者的需求,但我想要的是有一个 VBA 模块,其中包含从多个其他 Access 文件中的查询或模块调用的函数的代码。
我发现了两个有用的资源:
SO 帖子提供了一个简单的解决方案,但随后出现了潜在问题的警告,并提供了两个相当技术性和复杂资源的链接。EE 帖子提出了相同的简单解决方案,但没有警告。
简单的解决方案就是:
创建一个仅包含所需模块的 Access 文件,然后在任何其他旨在使用其代码的 Access 文件中创建对它的引用(通过 VBA:“工具 > 引用 > 浏览”)。
而已!Albert Kallal 在下面的评论中指出,从技术上讲,这是一个代码库,而不是插件,但据我所知,它完成了同样的事情。
文件扩展名。SO 帖子讨论了使用扩展名 mdb、mde、accdb 或 accde 命名新文件。另一方面,EE 帖子说它可以具有扩展名 mdb、mda、accdb 或 accda。我不熟悉“...e”文件,也没有深入了解。EE 帖子说“...b”和“...a”扩展是可以互换的,并建议使用后者来假装代码库是一个插件(因为它就像一个插件),这就是我的已经完成了。
它适用于 accdb,而不是 mdb 文件。由于两篇文章都谈到了 mdb 和 accdb 文件,我认为可以从这两种类型的文件中调用函数,但我发现情况并非如此。我发现如果我试图从 mdb 文件中设置引用,Access 说它做不到。我尝试将库创建为扩展名为 mdb 或 mda 的 Access 2002-2003 文件,并将其创建为扩展名为 accda 的 Access 2007 文件。它们都无法从 mdb 文件中引用。但是,从 accdb 文件中,该技术对我来说效果很好,我现在可以从多个 accdb 文件中调用该 accda 文件中定义的函数。
它可以在任何文件夹中。SO帖子中链接的参考资料之一说,如果包含代码的Access文件和引用它的文件位于不同的文件夹中,则该技术会出现问题。它没有说明这些问题是什么,而且我在不同文件夹中的文件也没有遇到任何问题。
Access 和 Excel 的相同模块。顺便说一句,我在通过上述技术创建的 Access 库和 Excel 加载项中都使用了一个模块。因此,我使用该模块来定义可以从其他 Access 或 Excel 模块或 Access 查询或 Excel 单元格调用的函数。(Access 库和 Excel 加载项都有第二个模块,其代码在两个应用程序之间不可移植。)但我必须小心维护通用模块,以便将 Access 或 Excel 中的更改复制到其他,因为我还没有准备好使用单个文件作为多个应用程序的加载项。
保存警告。一个警告:小心保存对模块的任何更改。SO 帖子警告说,从引用它的 Access 文件的 VBA 窗口对库模块所做的更改无法保存,因此必须在库本身的 VBA 窗口中进行更改。另一方面,我通过自己的痛苦经历发现,当从 Excel 窗口保存包含它的 Excel 文件时,不会保存对任何 Excel 模块所做的更改。模块必须从 VBA 窗口保存,否则任何更改都将在文件关闭时丢失且不会发出警告!
插件管理器呢?完成上述操作后,我很好奇如果尝试使用 Access 的加载项管理器(可通过Office button > Access Options > Add-Ins > Manage > Access Add-Ins > Go
或使用Database Tools > Developer Tools > Add-ins > Add-In Manager
)安装代码库会发生什么。我单击“添加新”,浏览到我的文件,然后单击“打开”。我收到消息“将加载项复制到 Microsoft Office Access 目录时出错。加载项未添加到 Microsoft Office Access 目录。” 所以我很幸运找到了上述代码库技术作为使用实际加载项的替代方法。