Страницы: 1
RSS
Функция и макрос мешают работе друг друга
 
Здравствуйте, добрые люди!
В примере имеется функция, через условное форматирование заливающая цветом ячейки, содержащие формулы, и простой макрос, добавляющий новую строку. Затем макрос должен выводить сообщение о том, что выполнен до конца.
Проблема в том, что функция по непонятной мне причине останавливает работу макроса после добавления им строки (сообщение не появляется). А выполнение макроса приостанавливает действие функции (заливка исчезает до первой новой операции с ячейками).
Пожалуйста, помогите "подружить" функцию и макрос так, чтобы каждый выполнял свою работу правильно и до конца.
 
А вот не надо называть фукции, процедуры, переменые зарезервировнными словами.
Переименуйте функцию.
 
Спасибо за хороший совет, но в данном случае, к сожалению, это проблему не решило.
 
Да ну? Макрос1 выгнал старую функцию ISFORMULA и прекрасно живет с обновленной ISFORMULA_
 
Извиняюсь за настойчивость, но у меня не работает. Не могли бы Вы прикрепить исправленный файл?
 
Не могли бы Вы прикрепить неработающий  файл?
 
Не могу, в нём служебная информация. А почему нельзя исправить в файле примера?
 
Добрый день! Пример из #1, действительно, не работает, по крайней мере, в Excel 2016, даже если переименовать функцию, которая используется в условном форматировании. При последовательном примененении макроса функция Msgbox в нем не отрабатывает, что свидетельствует о серьезных ошибках.
Не любую UDF-функцию можно использовать в условном форматировании. Использовать функцию рабочего листа ЕФОРМУЛА автору темы не удастся, так как у него Excel 2010.
Владимир
 
Цитата
Silurus написал:
Не могу, в нём служебная информация
Замените гаубицы на детские коляски.
 
Цитата
Silurus написал:
А почему нельзя исправить в файле примера?
Потому что неизвестно, КАК исправили Вы.
 
Попробуйте макрос из #1 записать в таком виде:
Код
Sub Макрос1()
    With ActiveSheet
        .EnableFormatConditionsCalculation = False
        ActiveCell.EntireRow.Insert xlDown
        .EnableFormatConditionsCalculation = True
    End With
End Sub

Изменено: sokol92 - 11.02.2020 17:13:40
Владимир
 
sokol92, спасибо большое, что не только вникли в проблему, но и предложили решение.
Ваш вариант кода работает как следует. Искренне благодарю за проявленную щедрость!
 
Успехов!
Владимир
 
И снова здравствуйте!
Предложенный вариант макроса работает только в Excel 2016.
В 2010-м и 2007-м проблема осталась неизменной. В прилагаемом примере оба варианта макроса, старый (Макрос1) и новый (Макрос2).
Может найдется ещё какое-нибудь решение? Принципиально важно, чтобы работало в Excel 2007. С нашим госбюджетом обновлений ждать не приходится, а продукцию считать нужно (и это далеко не гаубицы :) )
 
Здравствуйте! Поэкспериментировал с Excel 2007. К сожалению, в этой версии установка свойства листа EnableFormatConditionsCalculation в False не блокирует вызов UDF функций, вызываемых из формул условного форматирования.
Предположительно, ошибка возникает при вызове UDF функции из-за внутреннего пересчета адресов ячеек при вставке строки (не видя исходного текста, трудно что-то сказать более определенное).
Не думаю, что разработчик будет заниматься этим, поскольку поддержка версии 2007 давно прекращена. :(


Можно обойти эту ошибку с помощью использования дополнительной ячейки: см. ячейки A6, B6 во вложении. Тогда макрос из #1 будет работоспособен и в исходной редакции.
Изменено: sokol92 - 13.02.2020 13:17:31
Владимир
 
Владимир, спасибо за столь глубокий анализ проблемы и новый вариант решения. Восхищаюсь Вашим профессионализмом!
 
Добрый день!
Вспомнил простое лекарство для Excel 2007. Очередная модификация "проблемного" макроса из #1:
Код
Sub Макрос1()
  With Application
    .ScreenUpdating = False
    ActiveCell.EntireRow.Insert
    .ScreenUpdating = True
  End With
End Sub

Попробуйте, пожалуйста. Логика понятна - при отключенном отображении изменений экрана формулы условного форматирования не должны пересчитываться. Должно работать для всех версий 2007+.
Владимир
 
Работает идеально!
 
Ура! По поводу #16 - увы, профессионал попадает с первого выстрела. :)  
Владимир
Страницы: 1
Наверх