Страницы: 1
RSS
Копирование правил условного форматирования в EXCEL 2010
 
Добрый день!
Имеется рабочая книга в формате .xls, используемая для корпоративных нужд. В книге есть листы с возможностью добавления (с помощью VBA) строк. Для каждой строки есть одна ячейка с условным форматированием (отдельный столбец). Правило условного форматирования одно общее для всех ячеек столбца (указан диапазон для правила).
Суть проблемы в том, что в excel 2010 при копировании строк создается дополнительное правило условного форматирования, релевантное для появившейся при копировании ячейки. В excel 2003 и 2007 просто расширяется диапазон для правила. В результате чего работать с 2010 версией невозможно, даже добавление 1000 строк вызывает проблему, файл открывается минут 20 после появления в книги большого количества правил.

Подскажите, возможно ли как-то решить данную проблему?
Необходимо реализовать копирование с расширением диапазона действия правила в excel 2010.
Макрос пока выкладывать смысла не вижу, так как стандартное копирование/вставка строки работают по-разному: в 2003/2007 расширяется диапазон, в 2010 добавляется новое правило для ячейки.
В приложенном файле для столбца E указано правило условного форматирования. Если добавить строчку внутри диапазона, для которого работает форматирования, то произойдет следующее: в 2003/2007 диапазон расширится, в 2010/2013 добавится копия правила, применяемая только для скопированной ячейки столбца E.

Заранее спасибо!
 
Здрасьте

Проверил в Е2010:
было - в поле "применяется к" Е2:Е6
вставил 2 строки (вставка без копирования) внутри Е2:Е6 и протянул формулу еще на 2 строки, стало - Е2:Е10
Возможно , вы копируете строки, которые уже имеют правила УФ. В этом случае УФ копируется тоже.

Попробуйте использовать спецвставку - только значения
Или что-то вроде
Код
sheets("Sheet1").Range("A1:C1").value=sheets("Sheet2").Range("A1:C1").value
 
Цитата
zolotaryov_av пишет:
в 2010/2013 добавится копия правила, применяемая только для скопированной ячейки столбца E.
Однако, нет... WIN7 SP1, MSO 2010 SP1 ... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
nilem, добрый день!
Так и получается, полностью копируется строка: формулы, проверки данных, условное форматирование, просто форматирование. Поэтому макрос и работает по принципу копирования строки.
Я даже не думал делать вставку строки. Сейчас проверил, во вставленной строке остается все кроме формул. Только вот возможно ли переписать макрос, чтобы он потом протягивал формулы? Увы, но VBA я не знаю совсем. Вот макрос:
Код
Public Function Insert_N_Rows_nc(frr As Variant, nr As Variant) As VariantDim more_ins As Boolean Dim mf As Variant Dim nmf As Variant Dim mfl As Variant Dim aws As WorksheetDim wasn As StringDim IsProtected As BooleanDim Wanm As StringDim earfirst As VariantDim earlast As VariantDim wanum As VariantDim awsn As StringDim rc As VariantDim oSet aws = ActiveSheetrc = -4awsn = aws.NameIsProtected = aws.ProtectionModeIf IsProtected Then Run "UPAS"mf = 1more_ins = TrueIf nr = 1 Then   mfl = 1   more_ins = FalseElse    While (more_ins)        Rows(CStr(frr) & ":" & CStr(frr + mf - 1)).Select        Application.CutCopyMode = False        Selection.Copy        Selection.Ins ert Shift:=xlDown        nmf = mf * 2        If nmf * 2 > nr Then            more_ins = False        Else            mf = nmf        End If    Wend    mfl = nr - nmfEnd IfIf mfl > 0 Then    Rows(CStr(frr) & ":" & CStr(frr + mfl - 1)).Select    Application.CutCopyMode = False    Selection.Copy    Selection.Ins ert Shift:=xlDown    o = 1End IfApplication.CutCopyMode = FalseCells(frr, 1).Sele ctrc = 0e_inr:If IsProtected Then Run "PAS"Se t aws = NothingInsert_N_Rows_nc = rcEnd F unction


PAS и UNPAS блокируют и разблокируют защищенные ячейки соответственно.
 
Z, у меня тоже самое стоит. Может Вы тоже не копировали, а делали вставку новой строки?
 
Просто по коду не очень понятно, что и куда вы хотите копировать.
Покажите примерчик в файле
 
Расширил пример. Примерная идея работы макроса:
- я встаю на одну из ячеек диапазона A2:A4, например на A3;
- запускаю его, он выполняет свои проверки, затем берет строку 3 (т.е. ту, в которой я нахожусь) и начинает ее копировать. При этому полностью сохраняется форматирование, формулы в ячейках, расширяются нужные диапазоны (строки 1 и 5 скрыты, чтобы не рвались диапазоны).

Так вот, когда это делает 2003/2007 эксель - правила условного форматирования не копируются, расширяется диапазон для исходного правила (оно действительно для диапазона E1:E5).
 
Когда просто добавляешь строки, а потом копируешь туда формулы - все ОК. Т.е. в коде VBA надо убрать копирование и вставку строк и добавить просто вставку строк, а затем копирование ячеек с формулами
Изменено: Gilvanov - 29.01.2013 11:53:39
 
Эх, этот вариант содержит для меня больше всего рисков:
- макросом пользуется огромное количество людей;
- он используется для выполнения оперативной работы в весьма сжатые сроки;
- нет хорошего специалиста по VBA - пока протестируем, сломается куча граблей. Да и вообще придерживаюсь принципа: лезть в отлаженный механизм только когда других вариантов ну совсем нет.

Мне все-таки на данный момент ближе вариант с использованием 2003/2007 версии экселя.
Однако, хочу посоветоваться, может стоит обратиться в тех.поддержку майкрософт? Все-таки непонятно, почему начиная с 2010 версии изменилась эта логика копирования правил условного форматирования.
Изменено: zolotaryov_av - 29.01.2013 14:33:15
 
Вариант -  со списком/таблицей, НО если только файл не в общем доступе...  :(
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Добрый день!
Очень интересный и для меня вопрос (использую УФ в общей книге, но иногда пользователям надо вставлять строки).
Все-таки есть решение, что бы при вставке строк диапазон условного форматирования просто расширялся, а не создавались дополнительные правила?
Изменено: kev-nn - 20.05.2014 16:00:30
 
Добрый день!
Я так и не смог с этим ничего сделать. Приходится 2007 экселем пользоваться.
...Точнее я пока забил. Вариант с добавлением строк, а затем копированием в них формул и правил форматирования, скорее всего сработает, но его нужно настроить.
Изменено: zolotaryov_av - 21.05.2014 10:19:36
 
zolotaryov_av,  излишнее цитирование. Это если нежно. Если грубо - тупое копирование предыдущего сообщения.
Прошу полистать правила и исправить оплошность.
 
Здравствуйте!
Посмотрел ветки форума, но ответа не нашел. Может тема получила развитие?
Как всё-таки произвести УФ, так чтобы файл не тормозил?
В  моём случае УФ делается по всем группам работ и по периодам  (еженедельно, ежемесячно). У меня пока сделано на примере одной недели и  по одной группе работ.
Таких периодов 18, а групп работ 6. В файле будет еще 3 аналогичных листа
Боюсь, что простым копированием УФ заторможу файл. Так уже было.
 
Чем больше копий, тем больше правил. Как и форматов. Естественно, будет тормозить, если условий УФ много.
 
Цитата
vikttur написал: Чем больше копий, тем больше правил.
Это понятно. Но у меня два правила: разница между соседними ячейками >0 или <0. Но два правила распространяются на кучу диапазонов. Чё делать-то?
 
Проверить, как это будет работать при обычной заливке макросом.
 
Ой, пардон. Но я не смогу написать такой макрос. А не подскажете макрос для такой задачи?
Страницы: 1
Читают тему
Наверх