【问题标题】:Alternate solution for CreateObject("System.Collections.ArrayList") error -2146232576 (80131700)CreateObject(\"System.Collections.ArrayList\") 错误的替代解决方案 -2146232576 (80131700)
【发布时间】:2022-12-11 09:38:11
【问题描述】:

我的 VBA:

Dim numericColumnNames As Object
Set numericColumnNames = CreateObject("System.Collections.ArrayList")

第二行触发:

运行时错误“-2146232576 (80131700)”:
自动化错误。

我找到了this。这是唯一的解决方案吗?我可以改用任何不同的对象吗?可以做些什么来避免安装额外的软件包?至“安装额外的包”对于最终用户来说真的很令人沮丧。

【问题讨论】:

  • 你的问题很奇怪......要使用不同的对象做什么?做同样的事情可能有不同的方法,但首先你必须使用 ArrayList 显示一段代码以获得等效的解决方案......
  • 根据您的需要。常规 VBA 数组、集合、字典...
  • 我在这里 (link) 读到 CollectionArrayList 快得多,所以即使使用 ArrayList 又有什么意义呢。 Collection 没有什么?
  • Scripting.Dictionaries 应该已经安装在您的计算机上,这只是在 VBA 中添加适当引用的一个例子。如果您希望使用 ArrayList 的功能,因为内置的 VBA 集合无法满足您的需求,那么通过将集合对象包装在另一个类中来扩展和改进集合对象是一个相对简单的练习。
  • 问题是最终用户不知道该怎么做,这会破坏他们的体验。

标签: vba


【解决方案1】:

您不能只将任何 .NET 对象添加到 VBA 项目。您只能在 VBA 中使用 COM 可见对象。您可以围绕要使用的任何 .NET 方法编写 COM 包装器,但随后需要在将使用 VBA 代码的每个系统上注册该 DLL。这是很多工作,在你的情况下是免费的。

即使你可以,the documentation 也会告诉你根本不要使用这个对象:

重要的

我们不建议您将 ArrayList 类用于新的 发展。相反,我们建议您使用通用列表 班级。 ArrayList 类旨在容纳异类 对象的集合。

所以答案是使用 VBA Collection 对象。

Dim numericColumnNames As New Collection

【讨论】:

  • 非常感谢。在昨天阅读了一些文献之后,我怀疑我也应该使用Collection。非常感谢您提供官方参考,他们说我们不应该使用ArrayLists。这就是我所需要的,因为如果官方这么说,那就是......
猜你喜欢
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2011-04-13
  • 2016-10-24
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多