Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Ошибка при вставке формулы макросом (формула не вставляется в ячейку)
 
Приветствую друзья! Помогите разобраться:
Есть задача, макросом вставить формулы в нужные ячейки.
Имеем три формулы различной сложности, со второй и третьей проблем нет. Но вот самая первая, которая должна встать в диапазон D2 - либо вызывает ошибку при выполнении макроса, либо проходит все ровно, но формула в ячейку не встает.
Код
Range("d2").FormulaLocal = "=ЕСЛИ(И([@ДатаВыполненияЗаявки]="";СЕГОДНЯ()<[@[Дата исполнения]]);(ЧИСТРАБДНИ([@ДатаПоступленияЗаявки];[@[Дата исполнения]];Праздники)-1)-(СЕГОДНЯ()-[@ДатаПоступленияЗаявки]);ЕСЛИ(И(СЕГОДНЯ()>[@[Дата исполнения]];[@ДатаВыполненияЗаявки]="");""Просрочено"";""Выполнено""))"

Что делаю не так, помогите понять.

PS
В данной формуле содержится именованный диапазон в качестве одного из аргументов функции, может в нем дело?
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
кавычки и разделители!!!
 
БМВ, Я уже перепробовал их где мог. Не могу найти
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Все кавычки должны быть в отдельных кавычках
Код
Sub test()
Range("d2").FormulaLocal = "=ЕСЛИ(И([@ДатаВыполненияЗаявки]="""";СЕГОДНЯ()<[@[Дата исполнения]]);(ЧИСТРАБДНИ([@ДатаПоступленияЗаявки];[@[Дата исполнения]];Праздники)-1)-(СЕГОДНЯ()-[@ДатаПоступленияЗаявки]);ЕСЛИ(И(СЕГОДНЯ()>[@[Дата исполнения]];[@ДатаВыполненияЗаявки]="""");""Просрочено"";""Выполнено""))"
Range("e2").FormulaLocal = "=ЕСЛИ(ЕНД(ВПР([@ДатаПоступленияЗаявки];Рабочие_дни;1;ЛОЖЬ));РАБДЕНЬ([@ДатаПоступленияЗаявки];3;Праздники);[@ДатаПоступленияЗаявки])"
Range("F2").FormulaLocal = "=ЕСЛИ([@ДатаВыполненияЗаявки]<>"""";ЧИСТРАБДНИ([@ДатаПоступленияЗаявки];[@ДатаВыполненияЗаявки];Праздники)-1;0)"
End Sub
А вообще вставлять формулу макросом это моветон, считайте нужное кодом и вставляйте готовые значения
Согласие есть продукт при полном непротивлении сторон.
 
Sanja, Да, я знаю. Но, к сожалению, такие конструкции в VBA мне пока не доступны

Спасибо за помощь!)
Изменено: Dyroff - 14 Мар 2019 21:28:19
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, [@ДатаВыполненияЗаявки]="""" в двух местах
 
Казанский, и Вам спасибо!
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Код
        Range("d2").Formula = "=IF(AND([@ДатаВыполненияЗаявки]="""",TODAY()<[@[Дата исполнения]])," & _
"(NETWORKDAYS([@ДатаПоступленияЗаявки],[@[Дата исполнения]],Праздники)-1)-(TODAY()-[@ДатаПоступленияЗаявки])," & _
"IF(AND(TODAY()>[@[Дата исполнения]],[@ДатаВыполненияЗаявки]=""""),""Просрочено"",""Выполнено""))"
 
БМВ,Спасибо за альтернативный вариант, пробовал сегодня так тоже, но не вышло:) Оказалось запутался в кавычках.

Но удивительно то, что в других двух формулах все работало и с одинарными кавычками, а в этой почему-то нет
Изменено: Dyroff - 14 Мар 2019 21:38:25
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, Просто всегда проверяйте что даст текстовая строка ? "dkjfks""jd""nfkjsd" сразу все будет видно
Что касаемо альтернативы, иноземный вариант - международный и сработает у всех, в отличии от Local, который в моем eng Office даст ошибку будучи с русскими функциями.
 
БМВ,Вот честно, Local  пишу просто потому, что лень, в другую локацию формулу переписывать:) А так- да, согласен. В английской версии- универсально
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
лень, в другую локацию формулу переписывать
Не вручную же! Отладили формулу например в D2, в Immediate
Код
?[d2].formula
, Enter, и копипаст результат в код. С удвоением кавычек, конечно.
Или удвоить кавычки с помощью самогО VBA
Код
?replace([d2].formula,"""","""""")
 
Цитата
Казанский написал:
Не вручную же! Отладили формулу например в D2, в Immediate
Мне стыдно признаться, но именно в ручную я обычно и делал:) Так как я не знаю как это сделать в Immediate
Изменено: Dyroff - 14 Мар 2019 22:34:40
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
https://vremya-ne-zhdet.ru/vba-excel/okno-immediate/
https://www.youtube.com/watch?v=POC-2R0Bo2g
 
БМВ, Спасибо,Михаил, пошел изучать)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Читают тему (гостей: 1)
Наверх