Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2015, 15:36   #1
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию Exel зависает при выполнении моего макроса

6. Написать макрос, вычисляющий сумму значений в матрице, пока не встретится отрицательное число. Использовать оператор цикла Do-While.

Код:
Sub МатрицаСуммаПокаОтриц()
Do While ActiveCell.Offset(j, i).Value >= 0
    For i = 0 To Selection.Columns.Count
       For j = 0 To Selection.Rows.Count
   col = col + ActiveCell.Offset(j, i).Value
    Next j
Next i
Loop
MsgBox col
End Sub
Один раз не завис и выдало то, что у меня ошибка связана с offset в строке с do while.



Из-за чего происходит моя ошибка и как её исправить?

Последний раз редактировалось jirtreck; 29.10.2015 в 15:39.
jirtreck вне форума Ответить с цитированием
Старый 29.10.2015, 15:46   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

И что будет если отрицательное не встретится?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.10.2015, 15:55   #3
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Будет бесконечный цикл.

В выделяемых ячейках есть отрицательное, я не знаю в чем беда и как сделать правильно эту задачу, а мне надо сегодня уже сделать
jirtreck вне форума Ответить с цитированием
Старый 29.10.2015, 16:11   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub МатрицаСуммаПокаОтриц()
Do While True
  For i = 0 To Selection.Columns.Count
    For j = 0 To Selection.Rows.Count
      If ActiveCell.Offset(j, i).Value < 0 Then Exit Do
      col = col + ActiveCell.Offset(j, i).Value
    Next j
  Next i
Loop
MsgBox col
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.10.2015, 16:24   #5
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Благодарю!

Сделал сам практически такой же код, вспомнив об exit, но считало вместе с отрицательным или опять зависало.

Не укажете в чем отличие между true и тем выражением, которое я написал, почему так как у меня не надо делать?
Можно считать, что я в бэйсике первый день
jirtreck вне форума Ответить с цитированием
Старый 29.10.2015, 16:35   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

проверять нужно каждое значение во внутреннем цикле
а Ваш While проверит что правая нижняя ячейка >=0 и продолжить считать тоже самое еще раз, и еще, и еще... это любимое занятие компьютера считать что-нибудь

запустите Ваш вариант в пошаговом режиме только отметьте матрицу размером 1х2 (чтобы долго не втыкать пока индексы i и j не добегут до граничных значений) и... надеюсь, все сами увидите
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MySQL. Хранимая процедура зависает при выполнении lawliet93 SQL, базы данных 17 01.01.2013 20:55
Ошибка при выполнении макроса rlev Microsoft Office Excel 8 22.02.2010 12:41
При выполнении кода форма зависает. Как вывести прогрессбар? plato Общие вопросы Delphi 4 06.01.2010 15:37
Зависает документ при срабатывании макроса Quatro_Drive Microsoft Office Excel 6 22.09.2009 23:21
VB6. Программа зависает при выполнении. Artinka Помощь студентам 2 03.04.2008 00:06