Я пытаюсь написать функцию, которая принимает в качестве входных данных квадратной матрицы, которая должна иметь в своих клеткахVBA - ошибка переполнения при входе Для Loop
на и выше диагонали (снизу слева направо сверху) положительные числа, а
ниже диагональных пустых ячеек,
любит это 3 х 3-матрица (первая ячейка содержит # 10, вторая ячейка # 5, и т.д.):
10 5 1
9 6
4
Прежде чем я что-либо сделаю с этой матрицей, мне нужно проверить, что ячейки на диагонали и над ней содержат положительные числа, а остальные ячейки пусты. Я написал код ниже.
Проблема в том, что она дает мне ошибку переполнения во втором цикле For, и для жизни меня я не понимаю, почему. С матрицей 3 x 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 не может быть его байтом, попробуйте cbyte (-1) в ближайшей панели. –