【问题标题】:Updating Microsoft 2010 VBA Object Libraries更新 Microsoft 2010 VBA 对象库
【发布时间】:2018-07-13 03:41:22
【问题描述】:

我在运行 Microsoft Office 2016 的工作计算机上创建了一个程序,但是我的同事无法使用 VBA 程序,因为它没有更新的对象库。具体来说,Date and Left 函数会阻止程序运行。

如果他们运行的是 2010 版的 Microsoft Office,是否可以更新他们的对象库?

【问题讨论】:

  • 当您只使用核心 excel 功能时,您不需要显式调整引用。如果您在同事 PC 上的 VB 编辑器中进入工具 >> 参考,是否有标记为“缺失”的项目?顺便说一句,“左派”可能是一个红鲱鱼 - 我已经看到突出显示问题完全是另一回事
  • @TimWilliams 是的,Microsoft Outlook 对象库被标记为丢失。我看不出这会如何影响 Excel VBA 对象库?
  • VBA.Strings.Left_B_VAR_LEFT 内部函数的别名,在 VBA7.DLL 中定义。无法识别清楚地表明,您的 VBA 项目中缓存的编译 p 代码中的某些内容已被有效损坏;重置此缓存的一种方法是导出/删除所有模块并重新导入它们,as TinMan suggested。不相关,_B_STR_LEFTVBA.Strings.Left$ 函数别名,它接受一个实际的 String 并返回一个实际的 String,而 Left 接受并返回一个 Variant;你想要Left$,而不是Left
  • 请在您的问题中添加 Outlook 参考提示。 TinMan 写了一个答案(你见过吗?),这没有错,但没有满足你的需求。有了这些信息,他就可以避免努力了。

标签: excel vba object ms-office


【解决方案1】:

您不能使用旧版本对较新库版本的引用,因为它可以提供旧版本没有的功能,相反它可以工作(旧引用与新库,因为它们通常是落后的兼容)。

如果一个引用被破坏,所有其他的也不会加载。这就是为什么 VBA 函数 DateLeft 由于库未加载而失败的原因。

要独立于Office 版本,请使用Late-Binding,但即便如此,您也不能在旧版本上使用新功能(只需使用您想要支持的最旧版本的子集或检查版本,如果它太旧了,显示使用该功能的功能不适用于此Office 版本的消息)。

你可以开发Early-Bound拥有Intellisense和对象浏览器,并在分发前切换到Late-Bound

  • 删除 VBA 中的引用 -> 工具
  • 将类声明更改为Object
  • 使用CreateObject 创建实例
  • 将枚举替换为您自己的枚举、整数值或常量

例子:

Dim OutlookInstance as Outlook.Application
Dim OlMailItem as Outlook.Mailitem

Set OutlookInstance = New Outlook.Application
Set OlMailItem = OutlookInstance.CreateItem(olMailItem)

更改为:

Dim OutlookInstance as Object
Dim OlMailItem as Object

Set OutlookInstance = CreateObject("Outlook.Application")
Set OlMailItem = OutlookInstance.CreateItem(0)

您可以在Codekabinet 下载带有Outlook 2013 枚举的模块(未经测试,但它们应该涵盖Outlook 2016 的大部分内容)并导入您的项目或在您处于Early-Bound 时从对象获取值-浏览器或只是谷歌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多