VBA - For循环入口时的溢出错误

时间:2016-08-02 21:19:32

标签: vba

我试图编写一个函数,将一个应该包含在其单元格中的方阵作为输入

  • 在对角线上方(从左下方到右上方)正数,

  • 在对角线空单元下面,

喜欢这个3 x 3矩阵(第一个单元格包含#10,第二个单元格#5等):

10  5   1

9   6   

4

在我对此矩阵执行任何操作之前,我需要验证对角线上方和上方的单元格是否包含正数,而其他单元格是否为空。我写了下面的代码。

问题是它在第二个For循环中给了我一个溢出错误,对于我的生命,我不明白为什么。 对于3×3矩阵(即,n = 3,p = 3),第二个For循环的第一行将是:对于i = 3到2步-1。这有什么问题?

Option Base 1

Private Sub triangle1()

    Dim y As Variant
    y = Application.InputBox( _
    Prompt:=" Choose a square matrix in a worksheet : ", Type:=8)

    Dim i As Byte, j As Byte, n As Byte, p As Byte, s As Byte
    n = UBound(y, 1)
    p = UBound(y, 2)

    Debug.Print LBound(y, 1), n, p
    s = 1
    If n <> p Then
        Debug.Print "False"
        Exit Sub
    Else
        ' First For loop
        For i = 1 To n
            For j = 1 To p
                If y(i, j) <= 0 Or Not IsNumeric(y(i, j)) Then
                    Debug.Print "False"
                    Exit Sub
                End If
            Next
            p = p - 1
        Next

        ' Second For loop
        For i = n To 2 Step -1
            s = s + 1
            For j = s To p
                If Not IsEmpty(y(i, j)) Then
                    Debug.Print "False"
                    Exit Sub
                End If
            Next
        Next
        Debug.Print "True"
    End If
End Sub

1 个答案:

答案 0 :(得分:2)

问题在于byte类型。如果您将其替换为IntegerLong,则应该运行。

原因是byte无法处理负数(只有整数0-255),因此它不知道如何处理Step -1,因为该步骤的类型与迭代器。