【问题标题】:VBA Array to Range does not workVBA 数组到范围不起作用
【发布时间】:2017-06-15 18:42:34
【问题描述】:

我有一个数组数组。 数组有 999 个元素,每个子数组有 9999 个元素。

在代码的最后一部分,我尝试将子数组 164 设置为 Range("A1:A9999"),但它不起作用。

下面是部分代码:

MsgBox (UBound(Tiendas(164), 1))
ActiveSheet.Range("B1") = CStr(UBound(Tiendas(164), 1))
ActiveSheet.Range("B2") = Tiendas(164)(33)
Range("A1:A9999") = Tiendas(164)

我的 MsgBox 返回 9999。 B1 返回 9999。 B2 在元素 33 中返回值。好的。 但是 Range("A1:A9999") = Tiendas(164) 是空的。

【问题讨论】:

  • 1 阵列可能是水平的,因此您需要转置阵列。 2 尝试将.Value 添加到Range("A1:A9999") 的末尾,所以Range("A1:A9999") .Value = ... 如果这不起作用,请查看数字1。
  • 坦克。我只需要转置。Range("A1:A9999") = Application.Transpose(Tiendas(164))

标签: arrays vba excel


【解决方案1】:

数组和范围的大小需要相同,以使粘贴有效(即,不循环遍历元素和单元格)。

这个过程提供了一种动态的方式来实现这一点,只给定 [一维或二维] 数组,以及代表数据应该输出的左上角的单单元格 range 引用。

Sub Array2Range(arr, destTL As Range)
    'dumps [arr] (1D/2D) onto a sheet where [destTL] is the top-left output cell.
    destTL.Resize(UBound(arr, 1) - LBound(arr, 1) + 1, _
        UBound(arr, 2) - LBound(arr, 2) + 1) = arr
End Sub 

在我的回答 here 中查看更多解释和示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多