Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Замена условного-отформатированных ячеек их цветом / 7 сообщений из 7, страница 1 из 1
26.03.2007, 20:20:19
    #34416760
exelm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена условного-отформатированных ячеек их цветом
Подскажите пожалуйста код для снятия в выделенном диапазоне условных форматов у ячеек, но при этом сохраняя их цвет, каким он был до замены (по аналогии: специальная вставка - значения)
...
Рейтинг: 0 / 0
26.03.2007, 22:14:24
    #34416877
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена условного-отформатированных ячеек их цветом
exelm

Вот мой вариант. Но тестила его мало

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Sub s()
  Dim v_Cell As Range
  Dim v_Operator( 1  To  8 ) As String
  Dim v_Condition As Long, i As Long
  
  v_Operator(xlBetween) = ">="
  v_Operator(xlNotBetween) = "<"
  v_Operator(xlEqual) = "="
  v_Operator(xlNotEqual) = "<>"
  v_Operator(xlGreater) = ">"
  v_Operator(xlLess) = "<"
  v_Operator(xlGreaterEqual) = ">="
  v_Operator(xlLessEqual) = "<="

  Application.ScreenUpdating = False
  For Each v_Cell In Selection.Cells
    'если в ячейке есть условные форматы (коллекция FormatConditions не пуста)
    If v_Cell.FormatConditions.Count >  0  Then
      'для каждого условия проверяем, выполняется ли оно, и если да - "запоминаем" номер этого условия
      For i =  1  To v_Cell.FormatConditions.Count
        v_Condition =  0 
        With v_Cell.FormatConditions(i)
          Select Case .Type
          Case xlExpression 'условный формат - "формула"
            If Evaluate(.Formula1) Then
              v_Condition = i
              Exit For
            End If
          Case xlCellValue  'условный формат - "значение"
            Select Case .Operator
            Case xlBetween  'использован оператор "между"
              If Evaluate(v_Cell.Value & v_Operator(.Operator) & .Formula1) _
              And Evaluate(.Formula2 & v_Operator(.Operator) & v_Cell.Value) Then
                v_Condition = i
                Exit For
              End If
            Case xlNotBetween  'использован оператор "вне"
              If Evaluate(v_Cell.Value & v_Operator(.Operator) & .Formula1) _
              Or Evaluate(.Formula2 & v_Operator(.Operator) & v_Cell.Value) Then
                v_Condition = i
                Exit For
              End If
            Case Else  'использован другой оператор
              If Evaluate(v_Cell.Value & v_Operator(.Operator) & .Formula1) Then
                v_Condition = i
                Exit For
              End If
            End Select
          End Select
        End With
      Next i
      If v_Condition >  0  Then 'если условный формат "активен" то используем его
        'здесь код только для цвета ячейки, но также можно перенести из условного формата
        'формат шрифта, границы, узора
        v_Cell.Interior.Color = v_Cell.FormatConditions(v_Condition).Interior.Color
      End If
      v_Cell.FormatConditions.Delete
    End If
  Next v_Cell
  Application.ScreenUpdating = False
End Sub
...
Рейтинг: 0 / 0
26.03.2007, 22:44:28
    #34416909
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена условного-отформатированных ячеек их цветом
exelm

Мдя. Поторопилась. Виновата. Код глючит, где - пока не знаю
...
Рейтинг: 0 / 0
26.03.2007, 23:02:48
    #34416927
exelm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена условного-отформатированных ячеек их цветом
lena_####

Да, выскакивает run-time error 13 в строке:
Код: plaintext
If Evaluate(.Formula1) Then

--
Нашел что-то в тему, может поможет?..
...
Рейтинг: 0 / 0
26.03.2007, 23:58:02
    #34416997
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена условного-отформатированных ячеек их цветом
exelm Нашел что-то в тему, может поможет?.. скорее вот это: http://www.cpearson.com/excel/CFColors.htm

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
27.03.2007, 02:54:36
    #34417082
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена условного-отформатированных ячеек их цветом
Вот очередной вариант.

В процессе столкнулась с парой проблем (Win XP SP2, Office 2002):
1. Необъяснимое для меня явление такого свойства.
Пробегаю коллекцию ячеек в выделении:
Код: plaintext
1.
2.
  For Each v_Cell In Selection.Cells
    ...
  Next v_Cell
Для каждой ячейки получаю свойство:
Код: plaintext
  v_Cell.FormatConditions(i).Formula1
Картина такая. В ячейка выделения содержится условный формат, в котором использована формула вида: “=$A41=1” (ячейки столбца “N” в примере, начиная с 41-й).
Код
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub s()
  For Each v_Cell In Selection.Cells
    If v_Cell.FormatConditions.Count >  0  Then
      Debug.Print v_Cell.Address; Tab; v_Cell.FormatConditions( 1 ).Formula1
    End If
  Next v_Cell
End Sub
выводит в окно отладки следующее:
Код: plaintext
1.
2.
3.
$N$ 41          =$A51= 1 
$N$ 42          =$A51= 1 
$N$ 43          =$A51= 1 
$N$ 44          =$A51= 1 
Т.е. при попытке получить адрес ячейки, результат корректный, а при попытке получить свойство v_Cell.FormatConditions(1).Formula1 для той же ячейки – получаю везде свойство активной ячейки.
Это совершенно поставило меня в тупик.
Добавила строку v_Cell.Activate и все прошло:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub s()
  For Each v_Cell In Selection.Cells
    v_Cell.Activate
    If v_Cell.FormatConditions.Count >  0  Then
      Debug.Print v_Cell.Address; Tab; v_Cell.FormatConditions( 1 ).Formula1
    End If
  Next v_Cell
End Sub
выводит в окно отладки то, что и ожидалось получить:
Код: plaintext
1.
2.
3.
$N$ 41          =$A41= 1 
$N$ 42          =$A42= 1 
$N$ 43          =$A43= 1 
$N$ 44          =$A44= 1 

Для меня подобной поведение оказалось неожиданным.

2. У меня Office русский. Все тоже свойство v_Cell.FormatConditions(1).Formula1 возвращает формулы, используемые в условных форматах в русской локали, например, “ =И($A41=3;$B41=1)”. При этом метод Evaluate() с подобными формулами у меня не работает. Но прекрасно работает с аналогичными формулами в англицкой локали. Решение по переводу формул придумалось кривое : у некоей ячейки пустого листа меняю св-во FormulaLocal и затем получаю св-во Formula:

Код: plaintext
1.
  Worksheets("Лист1").Range("A1").FormulaLocal = v_Formula
  f_Evaluate = Evaluate(Worksheets("Лист1").Range("A1").Formula)

Вариант кривой, буду очень признательна за объяснения, как сделать это иначе.

Короче говоря, с теми условными форматами, которые встретились в прикрепленном файле код работает, но я не исключаю проблемы, связанные с вычислением формул для других вариантов условных форматов. Если они будут возникать, нужно в функции Function f_Evaluate(...) смотреть, какой аргумент передан в функцию, и какой передается методу Evaluate(). Для “уборки” лишнего нужно воспользоваться функцией Function f_DeleteSomeOne(...) просто добавив в функцию Function f_Evaluate(...) очередную строку вида:
Код: plaintext
  v_Formula = f_DeleteSomeOne(v_Formula, "что_нужно_найти", "на_что_найденное_поменять")
...
Рейтинг: 0 / 0
27.03.2007, 21:36:09
    #34419802
exelm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена условного-отформатированных ячеек их цветом
KL (XL)
Что-то не могу разобратся, как изменить те VBA-функции под мой случай?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Замена условного-отформатированных ячеек их цветом / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]