2014-01-05 1 views
0

Ранее я попросил помощи, чтобы получить код для форматирования диапазона переменных, и Gary's Student смог предоставить мне фантастическое решение here.Excel макрос для форматирования динамического диапазона с условиями

Теперь я понимаю, что мне нужно, чтобы форматирование было условным на основе значений столбца A, и я немного зациклен, и мой первоначальный вопрос не предлагает решение этой проблемы.

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

Для Пример: Если первая ячейка в A содержит «abc», пропустите форматирование. или Если первая ячейка в столбце A не содержит форматирование «abc».

Любая помощь очень ценится.

Гэри Студенты Код:

Sub BoxIt() 
Set r = Range("A1").CurrentRegion 
With r.Borders(xlEdgeLeft) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With r.Borders(xlEdgeTop) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With r.Borders(xlEdgeBottom) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With r.Borders(xlEdgeRight) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With r.Borders(xlInsideVertical) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
With r.Borders(xlInsideHorizontal) 
    .LineStyle = xlContinuous 
    .ColorIndex = 0 
    .TintAndShade = 0 
    .Weight = xlThin 
End With 
End Sub' 

ответ

1

Что-то, как это должно работать (этот код добавляет новый CF в текущую области A1 диапазона и применяется форматирование, когда строка в столбце Aне содержит строки из StrToFind переменных):

Sub test() 
    Dim r As Range 
    Dim StrToFind As String 

    StrToFind = "abc" 
    Set r = Range("A1").CurrentRegion 
    With r 
     .FormatConditions.Add Type:=xlExpression, Formula1:= _ 
      "=ISERROR(FIND(""" & StrToFind & """,$A1))" 
     .FormatConditions(.FormatConditions.Count).SetFirstPriority 

     With .FormatConditions(1) 
      With .Borders(xlLeft) 
       .LineStyle = xlContinuous 
       .ColorIndex = 0 
       .TintAndShade = 0 
       .Weight = xlThin 
      End With 
      With .Borders(xlTop) 
       .LineStyle = xlContinuous 
       .ColorIndex = 0 
       .TintAndShade = 0 
       .Weight = xlThin 
      End With 
      With .Borders(xlBottom) 
       .LineStyle = xlContinuous 
       .ColorIndex = 0 
       .TintAndShade = 0 
       .Weight = xlThin 
      End With 
      With .Borders(xlRight) 
       .LineStyle = xlContinuous 
       .ColorIndex = 0 
       .TintAndShade = 0 
       .Weight = xlThin 
      End With 

      .StopIfTrue = False 
     End With 

    End With 

End Sub 

Некоторые примечания:

1) в зависимости от ваших местных настроек формула "=ISERROR(FIND(""" & StrToFind & """,$A1))" может быть неправильной, в этом случае вы должны использовать "=ISERROR(FIND(""" & StrToFind & """;$A1))" (посмотрите на разделители в формуле непосредственно перед $A1: это либо запятая, либо точка с запятой).

2) вы должны вызывать эту функцию каждый раз, когда ваш стол изменился размер

3) «нормальный» формат вашего стола должна быть без границ (границы будет отображается с помощью CF только в том случае, когда строка столбец Aне содержитabc)

Надеюсь, это поможет!

+0

Нет доступа к моему компьютеру в настоящий момент, но очень взволнован, чтобы попробовать ваш код simoco. Будет ли это работать с несколькими строками? (Например, «abc» или «def»). Большое вам спасибо за подробный ответ. Я дам вам знать, как я начну, как только попробую. – user3159818

+0

Несомненно, это сработает, но вы должны разработать формулу modifu. Что-то вроде этого должно работать: '" = AND (ISERROR (FIND ("" "& StrToFind &" "", $ A1)), ISERROR (FIND ("" "& AnotherStrToFind &" "", $ A1))) " '- эта формула выведет CF только в том случае, если строка в столбце A не связывает как' StrToFind', так и 'AnotherStrToFind' –

+0

К сожалению, я не могу заставить этот код работать. Я довольно долго общался с ним, но мне не повезло. Я справился с довольно уродливой работой с рекордером, который должен соответствовать большей части того, что мне нужно. Спасибо кучи за быстрое и подробное решение simoco. – user3159818

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