2016-08-02 321 views
0

我想编写一个函数,作为输入,应该在与上述对角线(从底部从左到右在其细胞VBA - 在For循环进入溢出错误

  • 方阵顶部)的正数,和

  • 对角线空单元的下方,

喜欢这个3×3的矩阵(第一小区包含#10,第二小区#5等):

10 5 1 

9 6 

4 

在我对这个矩阵做任何事情之前,我需要验证对角线上方和上方的单元格包含正数,而其他单元格是空的。我写了下面的代码。

问题是它在第二个For循环中给我一个溢出错误,对于我的生活,我不明白为什么。 对于3 x 3矩阵(即n = 3,p = 3),第二个For循环的第一行将为:For i = 3 to 2 Step -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 
+0

这是因为-1不会成为其字节,请在即时窗格中尝试cbyte(-1)。 –

回答

2

问题出在byte类型。如果您将它们替换为IntegerLong它应该运行。

的原因是,byte不能处理负数(仅整数0-255),所以它不知道如何处理Step -1做,因为该步骤是相同类型的迭代器。

+1

是的 - “Step”使用与迭代器变量相同的数据类型(与所有其他值一样)。如果foo是字节,它们也会溢出,甚至没有运行:'foo = 1到300','foo = 300到400' – Comintern