2017-10-25 2 views
0

私が持っている以下の機能:VBA配列のランタイムエラー6オーバーフロー

Function ArrayLength(arr() As Double) As Integer 
    Dim len As Integer 
    Dim i As Integer 
    len = UBound(arr) - LBound(arr) 
    ArrayLength = len 

End Function 

'Print on console array 
Sub PrintArray(arr() As Double, column As Integer) 
    Dim len As Integer 
    len = ArrayLength(arr) 

    For i = 0 To len - 1 
     ActiveSheet.Cells(i + 2, column).Value = arr(i) 
    Next i 

End Sub 

私の配列は、以上200000個の要素を持っている、と私はそれを印刷しようとすると、それは私に次のエラーが表示さ: Run-time error '6': Overflow

+3

オーバーフロー:https://msdn.microsoft.com/en-us/library/aa264525(v=vs.60).aspx '整数\t範囲内の整数値(2バイト):-32768〜32767。 '' Long \t整数値(4バイト):-2,147,483,648から2,147,483,647まで。 – cyboashu

+0

整数を長整数に変更しました。ありがとうございます! –

答えて

0

を実際には、ではなくlongを使用する必要があります。配列長の数式は少し間違っています。それは1つ少なく返します。このコードを見てみましょう:

Function ArrayLength(arr) As Long 

    Dim k As Long 
    Dim i As Long 

    k = UBound(arr) - LBound(arr) 
    ArrayLength = k 

End Function 

Public Sub TestMe() 

    Dim arr() As Variant 
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) 
    Debug.Print ArrayLength(arr) 

End Sub 

答えは長さを得るために9である必要がありながら、それは単に長さを得るためにDebug.Print UBound(arr) + 1を書き、8を返します。

関連する問題