【问题标题】:Excel VBA Overflow Error with Dynamic Array动态数组的 Excel VBA 溢出错误
【发布时间】:2013-11-06 20:02:49
【问题描述】:

我在下面的 sub 中得到了一个溢出区域,我不知道为什么。逐步执行代码,lRows 和 lCols 被设置为正确的值,并且 redims 在数组上设置了正确的范围,但是当我尝试将范围值分配给数组时它失败了(在线:arrData = rng.value) .我的行确实经常达到 90,000 多条,但我的所有内容都一样长,所以我认为这不是问题......

Sub test()
Dim arrData() As Variant
Dim arrReturnData() As Variant
Dim rng As Excel.Range
Dim lRows As Long
Dim lCols As Long
Dim i As Long, j As Long

lRows = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
lCols = ActiveSheet.Range("A1").End(xlToRight).Column

ReDim arrData(1 To lRows, 1 To lCols)
ReDim arrReturnData(1 To lRows, 1 To lCols)
Set rng = ActiveSheet.Range(Cells(1, 1), Cells(lRows, lCols))
arrData = rng.value ' Overflow error on this line
For j = 1 To lCols
    For i = 1 To lRows
        arrReturnData(i, j) = Trim(arrData(i, j))
    Next i
Next j

rng.value = arrReturnData
End Sub

【问题讨论】:

  • 您所做的不是我尝试过的任何事情,但我从未见过有人尝试以这种方式设置数组。如果逐个单元格复制,是否会得到相同的结果?
  • 刚刚中风,突然间我突然想到尝试使用 .Value2 而不是 .value。马上解决了问题。
  • 你不需要ReDim arrData。事实上你应该声明arrData As Variant,而不是一个数组。

标签: arrays vba excel


【解决方案1】:

试试

Dim arrData as Variant
arrData = Range(Cells(1, 1), Cells(lRows, lCols))

更多信息请参见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多