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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2014, 14:32   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию Формулы не пересчитываются

Есть макрос:
Код:
Function СчетСумма() As Long
   РаботаВид = 1
   РаботаМастер = 2
   РаботаЦенаПоКаталогу = 3
   РаботаЦенаИная = 4
   РаботаПримечание = 5
   
   Сумма = 0
   For n = 1 To 10
      Работа = Evaluate(Names("ИД_СчетРабота" & n).Value)
      If Работа(РаботаВид, 1) <> "" Then
         Цена = 0
         If Работа(РаботаЦенаИная, 1) = "" Then
            If IsNumeric(Работа(РаботаЦенаПоКаталогу, 1)) Then Цена = Работа(РаботаЦенаПоКаталогу, 1)
         Else
            If IsNumeric(Работа(РаботаЦенаИная, 1)) Then Цена = Работа(РаботаЦенаИная, 1)
         End If
         Сумма = Сумма + Цена
      End If
   Next n
   СчетСумма = Сумма
End Function
В ячейке использую функцию так "=СчетСумма()".
При работе в книге, переходе между листами все работает. Но при открытии книги или переходе из другой книги появляется сообщение об ошибке "#ЗНАЧ!". Помогает только прямой выбор ячейки и нажатие ВВОД.
Пробовал
Код:
   ws.Calculate
   Application.Volatile
Не помогает. Как быть?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 06.08.2014, 15:01   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Не помогает. Как быть?
пользоваться дебагером при возникновении ошибок, прошли бы по-шагово по коду и нашли бы что ошибка в этой строке:
Код:
      Работа = Evaluate(Names("ИД_СчетРабота" & n).Value)
а когда видно где ошибка, становится понятно, почему возникла и как исправить

удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 06.08.2014, 15:18   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
пользоваться дебагером при возникновении ошибок, прошли бы по-шагово по коду и нашли бы что ошибка в этой строке:
Код:
      Работа = Evaluate(Names("ИД_СчетРабота" & n).Value)
а когда видно где ошибка, становится понятно, почему возникла и как исправить
удачи!
Проходил раз 100. Прикол в том, что в 95% случаях работает нормально. Проблема возникает в двух указанных выше местах. То есть ошибка не постоянна. И пропадает при "ручном" запуске пересчета.

Обошел убрав макрос к чертям, ввел технический столбец, куда по ЕСЛИ переношу информацию. Теперь просто суммирую этот столбец. А его самого скрыл от пользователя. Не красиво, но работает.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 06.08.2014, 15:32   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Names, Cells, Worksheets и пр. ситуативно ссылаются на разные обьекты по мере смены активной книги, листа в книге. обращение к Names без привязки к книге приводит к обращению к обьекту Names из активной книги
аналогично:
Msgbox Cells(2,2) - может Вам выдать очень неожиданные результаты, когда не указано где находится ячейка, Cells(2,2) - это будет обращение к В2 активного в момент обращения листа, активной книги.

Код:
Работа = Evaluate(thisworkbook.Names("ИД_СчетРабота" & n).Value)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 06.08.2014 в 15:35.
IgorGO вне форума Ответить с цитированием
Старый 06.08.2014, 17:17   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Спасибо за ответ!
Учту в будущем. Почему-то пересчет формулы не происходит. Попытался ловить событие активизации листа, и принудительно пересчитывать лист. Но без толку, событие наступает, а вот формула не пересчитывается (в ней ставил точки останова).
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формулы shadezx Помощь студентам 1 03.12.2013 20:07
формулы glebast Помощь студентам 1 17.09.2012 23:08
формулы arthur1989 Microsoft Office Excel 1 19.03.2010 16:21
Формулы SoAndSo Microsoft Office Word 2 09.11.2008 20:13
Формулы SunKnight Общие вопросы Delphi 2 07.04.2008 09:38