Страницы: 1
RSS
Замена формул результатом их вычисления в VBA, Вносить в ячейку не формулу, а только результат её вычисления.
 
Всем привет. Столкнулся вот с какой проблемой:
При заполнении определенного столбца вывожу в другие макросом формулы поиска и подстановки данных.
Делаю это так:
Код
rn.Offset(0, 1).Formula = "=IFERROR(INDEX(Таблица3[Тип авто],MATCH([@ФИО],Таблица3[Водитель],0)),""Нет в справочнике"")"

Но с ростом размера файла они обязательно начнут его тормозить.
Возможно ли выводить я в ячейку не саму формулу, а только результат её вычисления?

И ещё вопрос:
В столбце Н  я ввожу формулу руками, потому что никак не могу ее прописать в VBA
Формула
Код
=ЕСЛИОШИБКА(ЕСЛИ(И(ЕСЛИ(--ЛЕВСИМВ([@[Прибытие на погрузку план]];5)=0;--"00:01";--ЛЕВСИМВ([@[Прибытие на погрузку план]];5))<=[@[Прибытие на погрузку факт]];ЕСЛИ(--ПРАВСИМВ([@[Прибытие на погрузку план]];5)=0;--"23:59";--ПРАВСИМВ([@[Прибытие на погрузку план]];5))>=[@[Прибытие на погрузку факт]]);"Соблюден";"Нарушен");"Заполните все данные")

Пытаюсь внести ее в ячейку через VBA вот так:
Код
rn.Offset(0, 6).Formula = "=IFERROR(IF(AND(IF(--LEFT([@[Прибытие на погрузку план]],5)=0,--""00:01"",--LEFT([@[Прибытие на погрузку план]],5))<=[@[Прибытие на погрузку факт]],IF(--RIGHT([@[Прибытие на погрузку план]],5)=0,--""23:59"",--RIGHT([@[Прибытие на погрузку план]],5))>=[@[Прибытие на погрузку факт]]),""Соблюден"",""Нарушен""),""Заполните все данные"")"

Но она не работает, что-то я делаю не так.

Пример с кодом в прикрепленном файле.
Заранее благодарен за помощь.
Изменено: Dyroff - 12.03.2018 14:40:55
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, ваша таблица элементарно заполняется средствами PQ, и никаких формул в ячейках  :D . Использование VBA да еще и таким извращенским странным способом - это принципиально?
Изменено: PooHkrd - 12.03.2018 12:03:53
Вот горшок пустой, он предмет простой...
 
PooHkrd, нет, не принципиально) В сторону PQ  не смотрел и честно говоря, пока не понимаю, как это сделать через PQ
Изменено: Dyroff - 12.03.2018 12:56:37
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Тогда, во-первых нужно менять название темы на осмысленное описание проблемы, а во-вторых, нужен описанный вами алгоритм формирования основы таблицы. Результат будет накопительный или нет, ну и все такое.
Если на пальцах, то вам нужно сначала сформировать список строк, к которым вы будете левым слиянием (он же левый внешний джойн) подтягивать значения из разных справочников в нужном вам порядке, после каждого слияния пустые значения заменяете на "Нет в справочнике". А там где нужно сформировать расчетные столбцы исходя из комбинации подтянутых данных, создаете условный столбец и вперед. Попробуйте сами, где будет не получаться пишите - вам помогут. Сразу скажу там не сложно.
Вот горшок пустой, он предмет простой...
 
PooHkrd, , ок, спасибо. Попробую. Хотя для этого полностью придется изменить структуру файла. В этом файле логика такова, что ежедневно, внося в столбец B фамилии - тянутся данные из справочника, на основании подтянутых данных, данные из другого справочника. То есть это сбор некой базы, на основании которой потом будет формироваться сводная.
А при варианте с PQ  придется объединять запросы (это для меня уже не совсем элементарно), так как часть данных в одном справочнике, другая часть в другом.
Изменено: Dyroff - 12.03.2018 13:16:47
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Не берусь сказать правильно ли это, но ответ на Ваш вопрос - метод "Evaluate".
Код
rn.Offset(0, 1).Value = Application.Evaluate("=IFERROR(INDEX(Таблица3[Тип авто],MATCH([@ФИО],Таблица3[Водитель],0)),""Нет в справочнике"")")
Я не волшебник, я только учусь.
 
Wiss,  Спасибо за помощь.
Выдает ошибку #Знач
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
В этом файле логика такова,
Если продолжаем здесь, то предлагайте другое название темы, а то модеры сегодня то ли добрые то ли заняты чем-то, но обязательно придут и всех разгонят. Не хочу чтобы вся помощь пропала. Либо начинайте новую.
Для начала разбейте свою проблему на простые задачи, Начинаем с формирования списка, если с этим все понятно, создавайте тему что не понятно со слиянием запросов.
Вот горшок пустой, он предмет простой...
 
Виноват. Похоже, что Evaluate не совсем дружит с умными таблицами и не понимает [@ФИО]. Можно заменить на """ & rn.Value & """.
Код
rn.Offset(0, 1).Value = Evaluate("=IFERROR(INDEX(Таблица3[Тип авто],MATCH(""" & rn.Value & """,Таблица3[Водитель],0)),""Нет в справочнике"")")
Я не волшебник, я только учусь.
 
Wiss, такая же ошибка)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Проверьте. Для столбца С формулу поменял. У меня работает.
Я не волшебник, я только учусь.
 
Wiss, да, работает, спасибо)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Наверх