Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
28.10.2015, 13:42
|
|||
---|---|---|---|
|
|||
Excel: Работа цикла типа If..then...else |
|||
#18+
Доброго времени суток. Столкнулась с непонятной для меня проблемой, к слову сказать, непонятной совсем. Приведу кусочек кода: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
UBound(arr3) = 8, и когда k доходит до 9, if все равно пытается выполнится. Естественно, в месте arr3(k) = 0 выдает ошибку, поскольку 9-того столбца в массиве нет. Не пойму, почему он все равно туда заходит. k типа Integer, пробовала и Int(UBound(arr3)) писать - все равно заходит. Примерно такая же фишка попадалась и с Do While - условие уже неверно, но программа внутри цикла все равно выполняется, делает ровным счетом те же вычисления, получает тот же результат и вот тогда уже не заходит больше, т.е. один раз проскакивает вхолостую. Объясните чайнику, чего он не понимает, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.10.2015, 13:45
|
|||
---|---|---|---|
Excel: Работа цикла типа If..then...else |
|||
#18+
YoHnAUBound(arr3) = 8, и когда k доходит до 9, if все равно пытается выполнится. Естественно, в месте arr3(k) = 0 выдает ошибку, поскольку 9-того столбца в массиве нет. Нет проверки на выход за границу во внутреннем Do-Loop. Именно в нём k становится равным 9. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.10.2015, 13:53
|
|||
---|---|---|---|
Excel: Работа цикла типа If..then...else |
|||
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.10.2015, 14:13
|
|||
---|---|---|---|
|
|||
Excel: Работа цикла типа If..then...else |
|||
#18+
Понял, глупость сморозила, спасибо большое!) Просто до какого-то момента в программе подразумевалось, что до последнего столбца обязательно найдется ненулевой элемент. Не предусмотрела, жуткий косяк вышел. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=60&mobile=1&tid=2155745]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 143ms |
0 / 0 |