Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VBA数组大小在达到32767时重置(Excel 2010)_Arrays_Vba_Excel - Fatal编程技术网

Arrays VBA数组大小在达到32767时重置(Excel 2010)

Arrays VBA数组大小在达到32767时重置(Excel 2010),arrays,vba,excel,Arrays,Vba,Excel,我使用一个1D动态数组来保存总数量为60K以上的值。这似乎是一项简单的任务,但我注意到,一旦数组的大小达到32767,它又从0开始。如有任何建议,将不胜感激 我的代码: Sub GetHours() Dim R As Long, i As Long, N As Long, var, vRaw, v R = LastUsedRow(Sheet1) With Sheet1 vRaw = .Range(.Cells(2, 1), .Cells(R, 22)).Value End Wit

我使用一个1D动态数组来保存总数量为60K以上的值。这似乎是一项简单的任务,但我注意到,一旦数组的大小达到32767,它又从0开始。如有任何建议,将不胜感激

我的代码:

Sub GetHours()

Dim R As Long, i As Long, N As Long, var, vRaw, v

R = LastUsedRow(Sheet1)
With Sheet1
      vRaw = .Range(.Cells(2, 1), .Cells(R, 22)).Value
End With

For i = 1 To R - 1
    var = vRaw(i, 12)
    If IsNumeric(var) Then
        If IsArrayEmpty(v) Then
            ReDim v(0)
            v(0) = i
        Else
            N = UBound(v) + 1
            ReDim Preserve v(N)
            v(N) = i
        End If

    End If
Next

End Sub

Function LastUsedRow(ByVal ws As Worksheet) As Long

Dim lastrow As Long

On Error GoTo errHandler
lastrow = ws.Cells.Find(What:="*", After:=[A1], _
                         SearchOrder:=xlByRows, _
                         SearchDirection:=xlPrevious).Row

LastUsedRow = lastrow
Exit Function

errHandler:
    LastUsedRow = 0

End Function

Function IsArrayEmpty(anArray As Variant)
Dim i As Integer
On Error Resume Next
i = UBound(anArray, 1)

If Err.Number = 0 Then
    IsArrayEmpty = False
Else
    IsArrayEmpty = True
End If
End Function

注意,在最后一个IsArrayEmpty函数中,Dim i是整数


这将触发~32k以上的越界错误,然后将触发数组重置。

注意,在最后一个IsArrayEmpty函数中,Dim i是整数


这将触发~32k以上的越界错误,然后将触发重置数组。

让我猜一下:您在2013年以前的版本中使用Excel,这是此Excel电子表格允许的最大范围,这就是它重置的原因。如果不是这样,请将您正在使用的Excel版本添加到您的问题中。这可能会引起您的一些兴趣:LastUsedRow的代码在哪里?IsArrayEmpty可能也很重要…请中断
ReDim v(0)
并查看它何时运行。注意,在最后一个函数中,
Dim i是整数
。。。这将触发~32k以上的越界错误,然后将触发重置数组让我猜一下:您使用的Excel版本是2013年以前的版本,这是此Excel电子表格允许的最大范围,这就是它重置的原因。如果不是这样,请将您正在使用的Excel版本添加到您的问题中。这可能会引起您的一些兴趣:LastUsedRow的代码在哪里?IsArrayEmpty可能也很重要…请中断
ReDim v(0)
并查看它何时运行。注意,在最后一个函数中,
Dim i是整数
。。。这将在~32k以上触发一个越界错误,然后触发数组被重置。再次感谢,是的。再次表示感谢。