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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2009, 09:13   #1
Narishma
Новичок
Джуниор
 
Регистрация: 23.09.2009
Сообщений: 2
По умолчанию Пересчет user defined функций в Excel 2007

У меня такая проблема - создаю документ с несколькими User defined functions. Они используются довольно значительно, т.е. количество ячеек содержащих user defined функции исчисляется тысячами.

К сожалению, иногда - я не могу даже точно сказать, что становится причиной - вдруг часть формул начинает выдавать #ЗНАЧ#. Excel считает, что все посчитано и на F9 не откликается.

Если вручную зайти в любую из ячеек со #ЗНАЧ#, и нажать ВВОД, она пересчитывается и появляется нормальное искомое значение (не ошибка).

Мне удается обычно заставить Excel всё таки пересчитать книгу по-настоящему, внеся какие-нибудь серьёзные изменения, например, скопировав большой кусок книги куда-нибудь в соседний лист. Но в любом случае это безумно раздражает и я никак не могу сообразить, что служит причиной.

Спасибо большое если кто откликнется.

Станислав
Narishma вне форума Ответить с цитированием
Старый 23.09.2009, 09:21   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Может, ошибка в коде одной из UDF?
Выложите пример файла с Вашими UDF, посмотрим.

PS: Можно написать простейший макрос (из одной строки) для принудительного пересчёта листа, и вызывать его нажатием горячей клавиши.
EducatedFool вне форума Ответить с цитированием
Старый 23.09.2009, 15:21   #3
Narishma
Новичок
Джуниор
 
Регистрация: 23.09.2009
Сообщений: 2
По умолчанию

Специалист я не большой по программированию в Excel, если честно, это первая моя процедура. Переводит значение из одной валюты в другую опираясь на несколько именованных диапазонов в Excel:

Function CURRENCYTRANSLATE(Amount As Double, FromCurrency As String, ToCurrency As String, TranslationDate As Date) As Double
Dim FromCurrencyNumber As Integer
Dim ToCurrencyNumber As Integer
Dim BaseCurrency As Integer
Dim FromCurrencyRate As Double
Dim ToCurrencyRate As Double

FromCurrencyNumber = WorksheetFunction.VLookup(FromCurre ncy, Range("CurrencyNumbers"), 2, 0)
ToCurrencyNumber = WorksheetFunction.VLookup(ToCurrenc y, Range("CurrencyNumbers"), 2, 0)

FromCurrencyRate = WorksheetFunction.VLookup(CLng(Tran slationDate), Range("CurrencyRates"), FromCurrencyNumber, 0)
ToCurrencyRate = WorksheetFunction.VLookup(CLng(Tran slationDate), Range("CurrencyRates"), ToCurrencyNumber, 0)

CURRENCYTRANSLATE = Round(Amount * FromCurrencyRate / ToCurrencyRate, 2)

End Function

И по поводу макроса для пересчета - это что-нибудь вроде Worksheet.Recalculate?

Спасибо, что откликнулись.
Narishma вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
findObj is not defined man-1982 JavaScript, Ajax 0 09.07.2009 20:49
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 kovalevskivf Microsoft Office Excel 2 15.05.2009 16:47
Использование функций Excel СеВа Microsoft Office Excel 0 14.03.2008 13:37
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14
Excel 2007 WIC Microsoft Office Excel 2 24.11.2007 00:00