【问题标题】:How to fix subscript out of range error when assigning named ranges to array using ListObjects?使用 ListObjects 将命名范围分配给数组时如何修复下标超出范围错误?
【发布时间】:2019-07-26 17:45:42
【问题描述】:

我正在尝试将电子表格中的命名范围分配给数组。我想将相同的数组值粘贴到其他地方。命名范围表有 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

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

【问题讨论】:

  • 对不起,我发错了,这两个地方都应该是 vArray。是的,两者都只是 vArray。

标签: excel vba


【解决方案1】:

您只想复制表格并将其粘贴到从单元格 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

【讨论】:

  • 第三行相同的错误下标超出范围。 nRows 的值为 0。
  • @Jimmy 检查您的拼写。这意味着您在该工作表上没有具有该名称的表格。
  • 它在那里,我仔细检查了 Sheet2 中分配给 A1toC59 的 tblPrices。
  • 您是否将其创建为表格(例如使用 Ctrl+T)?还是只是一个命名范围?
  • 我再次尝试了这段代码,其中 nCols 再次包含在“nCols = .Listobjects....”行中的相同错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2019-08-25
相关资源
最近更新 更多