powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel: Работа цикла типа If..then...else
4 сообщений из 4, страница 1 из 1
Excel: Работа цикла типа If..then...else
    #39088913
YoHnA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Столкнулась с непонятной для меня проблемой, к слову сказать, непонятной совсем.
Приведу кусочек кода:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
For i = 1 To UBound(arr3)
    k = k + 1
    If k <= UBound(arr3) Then
        Do While arr3(k) = 0
            k = k + 1
        Loop
    End If
...
Next


UBound(arr3) = 8, и когда k доходит до 9, if все равно пытается выполнится. Естественно, в месте arr3(k) = 0 выдает ошибку, поскольку 9-того столбца в массиве нет.
Не пойму, почему он все равно туда заходит.
k типа Integer, пробовала и Int(UBound(arr3)) писать - все равно заходит.
Примерно такая же фишка попадалась и с Do While - условие уже неверно, но программа внутри цикла все равно выполняется, делает ровным счетом те же вычисления, получает тот же результат и вот тогда уже не заходит больше, т.е. один раз проскакивает вхолостую.
Объясните чайнику, чего он не понимает, пожалуйста.
...
Рейтинг: 0 / 0
Excel: Работа цикла типа If..then...else
    #39088919
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YoHnAUBound(arr3) = 8, и когда k доходит до 9, if все равно пытается выполнится. Естественно, в месте arr3(k) = 0 выдает ошибку, поскольку 9-того столбца в массиве нет.
Нет проверки на выход за границу во внутреннем Do-Loop. Именно в нём k становится равным 9.
...
Рейтинг: 0 / 0
Excel: Работа цикла типа If..then...else
    #39088922
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YoHnA,

Ну вот смотрите, когда k = Ubound(arr3) у Вас выполняется цикл While. При этом в нем участвует та самая k. И она внутри цикла While наращивается. Т.е. происходит следующее:
Допустим Ubound(arr3) = 9
тогда при наступлении условия k = 9 происходит цикл While.
И выполняется он до тех пора, пока arr3(9) = 0.
Если arr3(9) = 0, то наращиваем k. И идем дальше проверять значение массива.
Т.е. While проверяет следующую размерность: arr3(10). А её нет. Вот и ошибка.
Вам надо добавить выход из While, если k больше верхней границы:
Код: vbnet
1.
2.
3.
4.
Do While arr3(k) = 0
     k = k + 1
     if k > UBound(arr3) then exit do
Loop
...
Рейтинг: 0 / 0
Excel: Работа цикла типа If..then...else
    #39088942
YoHnA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, глупость сморозила, спасибо большое!)
Просто до какого-то момента в программе подразумевалось, что до последнего столбца обязательно найдется ненулевой элемент. Не предусмотрела, жуткий косяк вышел.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel: Работа цикла типа If..then...else
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]