| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование, связанное с MS Office > Ошибка 2015 Application.Evaluate |
| Автор: masterofmind 22.4.2009, 17:43 | ||||
| Доброго дня, коллеги. Т.к. я не являюсь программистом в его сакраментальной трактовке Компилятор VBA Ну никак не хочет кушать вот такую конструкцию:
Ошибка 2015 - Type mismatch 3 часа угробил - не могу понять, что не так. Данный код, лишь фрагмент функции- не мой, взят с сайта http://www.cpearson.com. Моя задача - получить цвет ячейки окрашенной условным форматированием. Соответсвенно цвет и кол-во ячеек будет постоянно меняться. Мне нужна была функция, которая бы это все считала. У уважаемого коллеги, чей сайт я выложил выше - все работает, но к сожалению на простых формулах, типа "=100" и т.д. С моей же формулой - не хочет ;-(. Сама формула - рабочая, условное форматирование по ней отрабатывает четко. Выкладывю текст самих функций:
Если кому-то пригодится-буду только рад. Если у кого есть свои наработки - прошу поделится. На поиски кода нашего зарубежноо коллеги у меня ушло 5 часов. ;) Прошу помощи. |
| Автор: Akina 22.4.2009, 18:01 | ||
|
| Автор: masterofmind 22.4.2009, 18:07 | ||||||
Почему тогда в такая конструкция:
при
У меня не срабатывает, а при другом условии на значении - все ок? Например вот таком:
Проверял неоднократно в отладчике. Брал 2 ячейки с разным условным форматированием. На 1 не работает, на 2 - работает. |
| Автор: Akina 22.4.2009, 21:20 |
Блин, каком??? мы что тут, телепаты??? |
| Автор: masterofmind 23.4.2009, 08:44 |
| Я же указал при каком... |
| Автор: Akina 23.4.2009, 08:47 | ||
Просто прелестное указание. |
| Автор: masterofmind 23.4.2009, 08:58 | ||||
Извиняюсь, может спешил, и неверно выразился, вот они :
Т.е. эти формулы и являлись условиями для форматирования ячеек. На этих значениях я запускал функцию. Причину ошибки отловил - при добавление в условное форматирование ячейки вычисляемой формулы (на русском, т.к. excel 2007 русский) - функция начинает отваливаться при вызове Application.Evaluate(FC.formula1) с той же самой ошибкой. При этом на листе - все прекрасно работает. Функция работает также при простых условиях типа - <,>,= <> и т.д. применяемых к ячейкам, т.е. вызов Application.Evaluate(FC.formula1) проходит корректно. Как победить ошибку - не знаю. Помогите пожалуйста, данный функционал очень нужен. |
| Автор: Akina 23.4.2009, 09:05 | ||
Замените русские имена на аглицкие... для конвертации можно использовать как статику (FUNC.XLS), так и временную ячейку
|
| Автор: masterofmind 23.4.2009, 09:23 | ||
| Огромный респект Akina! Все работает! Единственная просьба, можно маленький ликбез - почему так получается? Дабы не флудить более и знать корни.
Да и еще вопрос - на больших объемах данных, не скажется ли такой метод на быстродействии? Прошу прощения сразу - я не программист, я логист аналитик. А вот кодить, как говорится жизнь заставила...;) Хорошо в юности увлекался. ;) |
| Автор: masterofmind 23.4.2009, 10:33 | ||
Ну и еще один вопрос в тему-как преобразовать формулу, на основании ячейки. Т.е. подставить в неё относительные ссылки, на основании текущей ячейки?
Вот такой код - не работает. Я не правильно вызываю функцию конверта? Должна вернуть вот так - И(СУММ($C20:$E20)>0;СУММ(F20:G20)=0) |
| Автор: Akina 23.4.2009, 10:43 |
Да, неправильно. Читайте справку. |
| Автор: masterofmind 23.4.2009, 15:47 | ||
| Akina, ну сжальтесь. Я же писал, я не программист, но поставленную задачу нужно выполнить. Хоть убейте, не пойму как мне вычислить формулу относительно текущей ячейки. Метод application.convertformula уже и так и эдак, все не получается. В свойсве FormatCondition.formula - содержится формула которая задается при условном форматировании. Она едина и неизменна для всего диапазона. Эксель же при применении усл. формата сам подменяет и расчитывает его для каждой ячейки. Мне нужно сделать тоже самое, как? Вот пример: нужно расчитать её к примеру для ячейки "G50". Вот так - не получается: FC.Formula1= "=И(СУММ($C6:$E6)>0;СУММ(F6:G6)=0)"
rng - as Range, ячейка передаваемая при вызове функции. Т.е. он содержит ссылку на текущую ячейку. FC=rng.FormatConditions(Ndx) - тут я думаю понятно, ndx - счетчик условных форматов для ячейки. Что я делаю не так? Прошу, помогите. |
| Автор: Akina 23.4.2009, 16:21 | ||||||
Повторяю - читайте справку. Конкретно - на месте False должно стоять совершенно иное значение.
А вот это мне совершенно безразлично. Не хотите делать самостоятельно? нет проблем - отправляйтесь в ЦП, там может кто за вас и сделает... |