首页 > 解决方案 > 使用 ListObjects 将命名范围分配给数组时如何修复下标超出范围错误?

问题描述

我正在尝试将电子表格中的命名范围分配给数组。我想将相同的数组值粘贴到其他地方。命名范围表有 3 列和 59 行,但我希望行是动态的。

我尝试了其他更简单的方法将其分配给数组,但我的重点是使用 ReDim 数组并使用 ListObjects 和 ListRow 对象来完成这个动态数组。

Dim vArray() As Variant

ReDim vArray(3,  Worksheets("Sheet2").ListObjects("tblprices").ListRows.Count)

vArray = Worksheets("Sheet2").ListObjects("tblprices").DataBodyRange.Value

Range("F1").Select
Range("F:H").Value = vArray

应将数组复制到数组中并粘贴到目标位置。如果有人可以建议如何有效地粘贴,那也会有所帮助。谢谢。

标签: excelvba

解决方案


您只需复制表格并将其粘贴到从单元格 F1 开始的连续范围内。即使列数和/或行数发生变化,这也会起作用。

Dim vArray() As Variant, nRows As Long, nCols As Long
With ThisWorkbook.Worksheets("Sheet2")
    nCols = .ListObjects("tblprices").ListColumns.Count
    nRows = .ListObjects("tblprices").ListRows.Count
    vArray() = .ListObjects("tblprices").Range.Value
    .Range(.Cells(1, 6), .Cells(nRows+1, 6+nCols-1)).Value = vArray
End With

推荐阅读