【问题标题】:"Can't find Project or Library" for standard VBA functions标准 VBA 函数的“找不到项目或库”
【发布时间】:2010-10-05 03:58:02
【问题描述】:

所以我不得不在我的 PC 上运行其他人的 excel 应用程序,并且在标准函数(例如日期、格式、十六进制、中间值等)上出现“找不到项目或库”。

一些研究表明,如果我在这些函数前加上“VBA”。就像在“VBA.Date”中一样,它会正常工作的。

网页表明它与我系统上的项目引用有关,而它们在开发人员的系统上必须没问题。我将在一段时间内从其他人那里处理这个问题,并将这些应用程序分发给许多其他人,所以我需要了解我需要修复的 Excel 设置有什么问题,或者需要在xls 文件,以便它可以在各种系统上运行。我想避免让每个人都使用“VBA”。作为一个明确的参考,但如果没有理想的解决方案,我想这就是我们必须做的。

  • 如何制作“VBA”。隐含在我的项目属性/引用/等中?

-亚当

【问题讨论】:

  • 您是在使用一个版本的 excel 进行开发并分发给使用不同版本的用户吗?
  • 可能是这样 - 我不知道开发人员使用的是哪个版本。我会检查的。
  • 我不得不在一堆函数前面加上 vba。在它让我找到丢失的图书馆之前。
  • 尝试使用 Excel 在线 (Office 365) 打开文件并使用新文件名保存。这对我有用!

标签: excel vba reference namespaces


【解决方案1】:

如果缺少对完全不同库的引用,我已经看到标准函数出现错误。

在 VBA 编辑器中,从菜单中启动编译命令,然后检查引用对话框以查看是否缺少任何内容,如果有,请尝试添加这些库。

一般来说,编译完整的 VBA 代码,然后在分发之前保存文档似乎是一种好习惯。

【讨论】:

  • 我同意。缺少的参考文献将清楚地标记为 MISSING。在您的情况下,我怀疑它是 Excel 库的更高版本,可以通过后期绑定或选择较早的库来解决。我不认为编译代码将有助于缺少参考。
  • 嗯。我收到了一个 VBAproject 密码请求。情节变厚了。
  • 是时候找到我认为的原始开发者了。
  • 我只是想补充一点,我也有这个问题,但在一个相当独特的场景中。有些机器会拥有所有的 DLL(包括在本例中的 Acrobat Distiller),有些则没有。我仍然需要没有 Acrobat DLL 的机器来运行不使用它的宏,因此求助于 VBA。这些功能的命名空间添加。这解决了问题并在两种情况下都有效。
  • 我只是想指出我遇到了同样的问题,没有任何参考被标记为 MISSING,我还没有找到解决方案,但临时解决方案是:打开参考对话框在 VBE 中,不要碰任何东西,点击 OK,VBA 项目恢复正常。
【解决方案2】:

我遇到了同样的问题。这对我有用:

  • 在 VB 中,转到工具 » 参考
  • 取消选中库“Crystal Analysis Common Controls 1.0”。或任何图书馆。
  • 只需留下这 5 个参考:
    1. Visual Basic For Applications(这是定义 VBA 语言的库。)
    2. Microsoft Excel 对象库(它定义了 Excel 的所有元素。)
    3. OLE 自动化(指定用于链接和嵌入文档的类型以及其他应用程序的自动化以及 Excel 用来与外部世界通信的 COM 系统的“管道”。)
    4. Microsoft Office(它定义了所有 Office 程序共有的东西,例如命令栏和命令栏控件。)
    5. Microsoft Forms 2.0 如果您使用的是用户表单,这是必需的。这个库定义了诸如用户表单和可以放置在表单上的控件之类的东西。
  • 然后保存。

【讨论】:

  • 对于我来说,我必须取消选中“MicroSoft MapPoint 19.0 对象库”,它在相关宏中未使用,但在电子表格的其他地方使用。
  • 我的是“Microsoft Windows Common Controls 6.0 (SP4)”,它出现在我的 Excel 2010 机器上,但出现在装有 Excel 2013 的笔记本电脑上。此外,它似乎正在使用中(我得到“无法删除控制或引用;如果我取消选中它,则在使用中)所以我需要找出正在使用它的东西并摆脱它......
  • [更正:上面应该说“not on a laptop...”] 结果我无法在它工作的机器上删除项目引用,任何一个。我现在尝试以编程方式删除它(使用.VBProject.References,循环它们,并在坏的那个上调用Remove来删除它)我得到“运行时错误'-2147319779(8002801d)':对象库不是在没有库的机器上注册”,并且我在 确实 存在 MSComctlLib 库的机器上收到“运行时错误'57101':无法删除默认引用”。 Grrrr。
【解决方案3】:

我遇到了这个确切的问题,并发现在用户计算机上,我所依赖的库之一在引用对话框中被标记为“MISSING”。在这种情况下,我的 Office 2007 版本中提供了一些办公字体库,但客户端桌面上没有。

你得到的错误是一个完整的红鲱鱼(正如 divo 指出的那样)。

幸运的是,我没有使用库中的任何内容,因此我能够将其从 XLA 引用中完全删除。我想,divo 建议的最佳实践的扩展将是测试以检查所有目标 Office 版本上的 XLA(无论如何都不是一个坏主意)。

【讨论】:

    【解决方案4】:

    在我的例子中,该函数是 AMBIGUOUS,因为它是在 VBA 库(在我的参考资料中)和 Microsoft Office 对象库(也存在)中定义的。我删除了 Microsoft Office 对象库,瞧!无需使用 VBA。前缀。

    【讨论】:

      【解决方案5】:

      就我而言,我什至无法在 Visual Basic 窗口中打开“参考”。我什至尝试重新安装 Office 365,但没有成功。最后,我尝试在“信任中心”设置中禁用宏。当我重新启动 Excel 时,我收到了宏被禁用的警告消息,当我单击“启用”时,我不再收到错误消息。

      后来我重新启用了“信任中心”设置中的所有宏,但错误信息没有出现!

      嘿,如果没有其他适合您的方法,请尝试上述方法;它对我有用! :)

      更新: 问题又回来了,这就是我第二次“修复”它的方式

      我在 Excel 在线 中打开了我的工作簿(Office 365,在浏览器中,无论如何都不支持宏),用新文件名保存它(仍然使用 .xlsm 文件扩展名),并在桌面软件中重新打开。有效。

      【讨论】:

      • 在线在 Excel 中打开工作簿是解决这个问题的唯一方法,并且相信我,从安全模式到重新安装/修复 Office,再到重新启动我的电脑并祈祷。我希望我在这里了解更多的因果关系,因为它似乎随机发生在启用宏的.xlsm 工作簿中,尽管相当罕见 - 有趣的是,它似乎更频繁地发生在更复杂的文件中。似乎 VBA 库的某些元素可能会损坏,但 Excel 在线可以修复它,而其他方法不能修复它的事实很奇怪
      • 迄今为止我为这个非常烦人的错误找到的最简单的修复方法。我的猜测是,它将来自共同创作用户(Excel 文件位于 Sharepoint),他们都具有相同的 Excel 主要版本,但次要更新不同(例如,版本 2101 构建 13628.20000 -vs- 版本 2101 构建 13624.20002)。会是这样吗?我非常想弄清楚这个问题,自从 OfficeUploadCenter 在过去几个月被 Microsoft 删除(现在导致许多同步错误)后,这种情况似乎更加频繁。
      【解决方案6】:

      对于那些还没有找到适合你的其他答案的人。

      试试这个:

      关闭文件,通过电子邮件将其发送给自己,或者如果您在工作,请将其从网络驱动器粘贴到您的桌面,以使其在“保护模式”下打开。

      现在打开文件

      不要点击任何启用编辑或黄丝带

      转到 VBA 编辑器

      转到Debug - - Compile VBA Project,如果“Compile VBA Project”是灰色的,那么你可能需要点击一次黄丝带才能启用内容,但不要启用宏。

      点击编译后,保存,关闭文件。重新打开它,启用一切,它应该没问题。这对我来说 100% 的时间都有效。

      【讨论】:

        【解决方案7】:

        就我而言,我是在家里(没有 Visio)检查我的办公室计算机(安装了 Visio)上完成的工作。尽管 VBA 似乎被简单的默认函数挂断了,但问题是我对 Visio 库的引用仍然处于活动状态。

        【讨论】:

          【解决方案8】:

          我找到了对 AVAYA/CMS 程序文件的引用?完全随机,这是在 MS Access 中,与 AVAYA 无关。我的 PC 上确实有 AVAYA,而其他人没有,所以这解释了为什么它在我的机器上而不是在其他机器上工作 - 但不是 Access 如何链接到 AVAYA。无论如何-我只是取消选中了参考,这似乎已经解决了问题

          【讨论】:

            【解决方案9】:

            即使所有引用都正常,前缀问题也会导致编译错误。

            如何为所有模块中的所有“内置 VBA 函数”创建一个查找和替换子, 像这样:

            replace text in code module

            例如“= Date”将替换为“= VBA.Date”。

            例如" Date(" 将替换为 " VBA.Date(" 。

            (不包括“dim t As Date”或“mydate”)

            所有用于查找和替换的 vba 函数都写在这里:

            vba functions list

            【讨论】:

              【解决方案10】:

              我已经在几个 XLSM 文件中打开和关闭此错误大约两年了(这是最烦人的,因为当它发生时文件没有任何问题!-我怀疑孤立的 Excel 进程是问题的一部分)

              我发现的最有效的解决方案是将 Python 与 oletools 结合使用 https://github.com/decalage2/oletools/wiki/Install 并提取所有模块的 VBA 代码并保存在一个文本文件中。

              然后我只需将文件重命名为 zip 文件(备份以防万一!),打开此 zip 文件并删除 xl/vbaProject.bin 文件。重命名回 XLSX,应该可以了。

              复制保存的 VBA 代码(需要清理换行符、cmets 和其他内容。还需要添加缺少的库。

              当其他方法没有时,这救了我。

              YMMV.

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-03-26
                • 2019-06-30
                • 2016-11-22
                • 2017-02-09
                • 1970-01-01
                • 2017-03-31
                • 2021-09-20
                相关资源
                最近更新 更多