2016-05-09 6 views
1

Я пытаюсь добавить условное форматирование в диапазон, который проверяет ячейку X1, и если она не соответствует ей, применяются условия.VBA, применяя условное форматирование к ячейке

Если я применил его к одной соте, он отлично работает. однако мне нужно, чтобы он применялся к каждой ячейке в диапазоне.

код:

Function FindComment(rng As Range, strSearch As String) As Boolean 

On Error GoTo err_h: 

strSearch = LCase(strSearch) 

If Len(strSearch) = 0 Then 
    FindComment = False 
    Exit Function 
End If 

If InStr(1, rng.Comment.Text, strSearch, vbTextCompare) > 0 Or InStr(1, rng.Text, strSearch, vbTextCompare) > 0 Then 
    FindComment = False 
    Exit Function 
End If 

FindComment = True 
Exit Function 

err_h: 
    FindComment = True 
End Function 

И применить условное форматирование:

Public Sub AddConditionalFormat(rng As Range) 

    rng.FormatConditions.Add Type:=xlExpression, Formula1:= _ 
     "=FINDCOMMENT(" & rng.Address(, , xlA1) & ",$X$1)" 
    rng.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 

    With Selection.FormatConditions(1).Font 
     .ColorIndex = 2 
    End With 

    With rng.FormatConditions(1).Interior 
     .Pattern = xlGray75 
     .PatternThemeColor = xlThemeColorDark2 
     .PatternTintAndShade = 0 
     .ColorIndex = 2 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 

    rng.FormatConditions(1).StopIfTrue = False 

End Sub 

диапазон диапазон ("B6: GD9") определены как ГСЧ.

В настоящее время, если результаты соответствуют ему, просто удаляются все ячейки, включая совпадение.

У кого-нибудь есть идея, как легко исправить? я бы предпочел бы что-то, что бы не отменило код, применив к каждой ячейке и т. д.

ответ

1

Range.Address property по умолчанию ссылается на абсолютные ссылки на строки и столбцы. Вы ищете что-то наподобие A1, но вы получаете $A$1.

rng.FormatConditions.Add Type:=xlExpression, Formula1:= _ 
    "=FINDCOMMENT(" & rng.Cells(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False, ReferenceStyle:=xlA1) & ", $X$1)" 
'alternate in shorthand 
rng.FormatConditions.Add Type:=xlExpression, Formula1:= _ 
    "=FINDCOMMENT(" & rng.Cells(1, 1).Address(0, 0, xlA1) & ", $X$1)" 

Используя .Cells(1, 1) должен сделать, что формула ссылается на верхнюю левую ячейку в rng.

+0

Спасибо, мне нужно, чтобы он мог ссылаться на активную ячейку (то есть, если выбрано B9, мне нужно условное форматирование, которое должно быть применимо на B9, не ссылающееся на B6, которое находится в верхнем левом углу) –

+0

теперь работает, но он выделяет ВСЕ в диапазоне белого цвета, когда положительный результат найден не только в результате. любые дальнейшие предложения? –

+0

Мне нужно будет обработать более полное рабочее место. Мне кажется, что проблема может заключаться в назначении формулы. Если вы применяете это правило CF к B6: GD9, формула должна начинаться как '= FINDCOMMENT (B6, $ X $ 1)', что я, хотя я вам дал. Правило CF корректирует его * относительно * верхней левой ячейки в поле «Применяется к:». По существу, формула должна быть одинаковой для всех ячеек в стиле xlR1C1; например, '= FINDCOMMENT (RC, R1C24)'. Есть ли способ, которым FINDCOMMENT является ошибкой во всем? Вы возвращаете True при ошибке. – Jeeped

Смежные вопросы