Страница: 1 |
Вопрос: Использование встроенных фунуций | Добавлено: 14.04.06 17:00 |
Автор вопроса: ![]() |
Кто знает каким образом можно получить результат вычисления встроенной формулы Ecxel непосредственно в коде VBA?
Например, в ячейке есть такая формула: =СЦЕПИТЬ(РАЗНДАТ($O22;ЕСЛИ($BD22="";СЕГОДНЯ();$BD22);"Y");"-";РАЗНДАТ($O22;ЕСЛИ($BD22="";СЕГОДНЯ();$BD22);"YM");"-";РАЗНДАТ($O22;ЕСЛИ($BD22="";СЕГОДНЯ();$BD22);"MD")) Как можно переменной, например "st_Part" присвоить результат вычисления этой формулы не используя рабочего листа? |
Ответы | Всего ответов: 9 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #1 | Добавлено: 15.04.06 05:33 |
Открыть файл funcs.xls и узнать, как называются функции по-английски. |
Номер ответа: 2 Автор ответа: ![]() ![]() Вопросов: 7 Ответов: 11 |
Профиль | Цитата | #2 | Добавлено: 18.04.06 10:46 |
Идея замечательная, но к сожалению не подходит. Может это только относительно одной функции - РАЗНДАТ или DATEDIF. Поясню: этой функции, почему-то, передаются параметры по-разному (на листе и в VBA) и она возвращает разные значения. Пример:
если искать количесто лет между датами 31.12.2005 и 1.01.2006, то ф.РАЗНДАТ возвращает 0, а ф.DATEDIF - 1!!! |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #3 | Добавлено: 18.04.06 12:12 |
Это аналог, а не копия. Некоторым функциям есть только аналоги. Сами функции листа перечислены в application.worksheetfunction.
Если требуется вычислить именно формулу с несуществующим аналогом функции, то application.evaluate(), причём формулу перевести в английский локаленезависимый стандарт. |
Номер ответа: 4 Автор ответа: ![]() ![]() Вопросов: 7 Ответов: 11 |
Профиль | Цитата | #4 | Добавлено: 26.04.06 15:23 |
Спасибо за совет! Но опять не работает ![]() Почему-то Evaluate не хочет считать ни одну формулу, где в качестве одного из параметров используется выражение с кавычками Year = Application.Evaluate(" ![]() ![]() ![]() Остальные формулы щелкает на ура. В чем может быть дело? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #5 | Добавлено: 26.04.06 15:34 |
Я ж говорю - приведи в стандарт...
Дата в формате "mm/dd/yyyy", с кавычками вокруг. |
Номер ответа: 6 Автор ответа: ![]() ![]() Вопросов: 7 Ответов: 11 |
Профиль | Цитата | #6 | Добавлено: 26.04.06 17:33 |
А DATEDIF - это что?
Насчет кавычек вокруг ты прав - это я забыл. Но я не пойму почему формулу Evaluate("edate(""" & Date1 & """,10)" ![]() ![]() ![]() В качестве Date передаются даты в формате "dd.mm.yyyy" |
Номер ответа: 7 Автор ответа: ![]() ![]() Вопросов: 7 Ответов: 11 |
Профиль | Цитата | #7 | Добавлено: 26.04.06 17:33 |
А DATEDIF - это что?
Насчет кавычек вокруг ты прав - это я забыл. Но я не пойму почему формулу Evaluate("edate(""" & Date1 & """,10)" ![]() ![]() ![]() В качестве Date передаются даты в формате "dd.mm.yyyy" |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #8 | Добавлено: 26.04.06 17:58 |
А всё же, передавай mm/dd/yyyy... |
Номер ответа: 9 Автор ответа: ![]() ![]() Вопросов: 7 Ответов: 11 |
Профиль | Цитата | #9 | Добавлено: 26.04.06 17:59 |
В продолжение вопроса.... Точнее наверное с этого надо было начать. ![]() Описание задачи, которую я пытаюсь решить: есть дата приема сотрудника на работу, может быть дата его увольнения. Необходимо подсчитать стаж его работы в годах, мес, днях. Вместо громоздкой формулы =ЕСЛИ($O6="";"";СЦЕПИТЬ(РАЗНДАТ($O6;ЕСЛИ($AZ6="";СЕГОДНЯ();$AZ6);"Y" ![]() ![]() ![]() Код VBA: Function Стаж(ДатаПриема, _ ДатаУвольнения) Dim Года As Long Dim Месяцы As Long Dim Дни As Long If ДатаУвольнения = Empty Then ДатаУвольнения = Date End If If Not ДатаУвольнения = Empty Then Года = Evaluate(" ![]() ![]() ![]() Месяцы = Evaluate(" ![]() ![]() ![]() Дни = Evaluate(" ![]() ![]() ![]() Стаж = Года & "-" & Месяцы & "-" & Дни Else Стаж = Empty End If End Function Все бы замечательно, если бы не DATEDIF. Можно было бы замутить что-то подобное на функции аналоге VBA.DateDiff, но она разницу считает не так как экселевская DATEDIF. Буду очень признателен, если кто подправит глюк в функции, если он есть ![]() |
Страница: 1 |
|