【问题标题】:Late binding an array后期绑定数组
【发布时间】:2014-07-09 01:44:13
【问题描述】:

我很困惑,因为在 VBA 中后期绑定数组时找不到 任何东西。这甚至可能吗?如果是,如何?如果不是 - 为什么?

注意:我不介意是否可以使用像

这样的原生 .Net/C# 类型
Dim o as Object
set o = CreateObject("System.Array")

尽管System.Array is COM visible 似乎无法实例化它。

知道如何在 VBA 中后期绑定数组数据类型吗?

请不要提及字典或集合,因为这个问题是特定于数组的


附加信息:

这是对my other question 的一种跟进。由于似乎不可能在不循环的情况下将本机 VBA 数组传递给本机 .Net 集合,我只是想知道是否可以将数组作为安全数组进行后期绑定,这意味着它们是兼容的,因此将 VBA 数组传输到 .Net 集合。网络是可能的 - 如果我完全错了,请纠正我。

【问题讨论】:

  • 我很好奇您认为采用 .NET 数组返回 .NET 集合的方法在内部做什么? (只是你之前的问题,我想我记得模糊)
  • 我不确定我是否理解确切的问题:是不是:1)在 VBA 中后期绑定到 VBA 数组,2)在 C# 中后期绑定到 VBA 数组,或者 3).. VBA 中的 .late 绑定到 .NET 数组? (我认为它看起来像 3 号)
  • @Cor_Blimey 这是第三个

标签: c# arrays excel vba com


【解决方案1】:
  set o = CreateObject("System.Array")

System.Array 是一个抽象类。所以不,这不可能工作。数组类型很特殊,它们通常由编译器创建。后门是Type.MakeArrayType(),你可以构造一个那个

您不想使用任何东西。不要那么努力,任何 VBA 数组都已转换为 System.Array。它通常只是一个不一致数组,它的第一个元素没有索引为 0。VBA 喜欢 1,除非您使用像 Dim arr(0 To 3) As Double 这样的语法或使 Option Base 0 生效。并非总是可行,请使用 Array.GetValue() 访问不符合要求的数组。查看您的 other question 以获取示例访问器包装器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多