Процедура слишком большая ошибка при применении макроса. Как я могу сделать его меньше? - PullRequest
0 голосов
/ 27 мая 2019

Итак, я хочу, чтобы в некоторых столбцах отображались цветовые схемы для их значений. Из столбцов А в CD, однако я не могу выбрать их все, иначе мой лист будет испорчен, потому что среднее будет взято из значений из всех столбцов, и мне нужно, чтобы он рассчитывался индивидуально. Мое решение? Чтобы скопировать код из одного столбца, просто вставьте его снова и замените следующий столбец, например код ниже:

Sub Macro2()
'
' Macro2 Macro
'

'
    Selection.FormatConditions.AddColorScale ColorScaleType:=3
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
        xlConditionValueLowestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
        xlConditionValuePercentile
    Selection.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 5287936
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(3).Type = _
        xlConditionValueHighestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With
End Sub
Sub Macro3()
'
' Macro3 Macro
'

'
    Columns("B:B").Select
    Selection.FormatConditions.AddColorScale ColorScaleType:=3
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
        xlConditionValueLowestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
        xlConditionValuePercentile
    Selection.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 5287936
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(3).Type = _
        xlConditionValueHighestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With
    Columns("C:C").Select
    Selection.FormatConditions.AddColorScale ColorScaleType:=3
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
        xlConditionValueLowestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
        xlConditionValuePercentile
    Selection.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 5287936
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(3).Type = _
        xlConditionValueHighestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With
...

И это продолжается и продолжается ....

Когда я пытался запустить его, я получаю сообщение об ошибке «Слишком большая процедура». Как я могу упростить это?

1 Ответ

0 голосов
/ 27 мая 2019

Используйте цикл:

Dim c as Range, fc As ColorScale

For Each c in Range("A1:CD1").Cells

    Set fc = c.EntireColumn.FormatConditions.AddColorScale( _
                                               ColorScaleType:=3)
    fc.SetFirstPriority
    fc.ColorScaleCriteria(1).Type = xlConditionValueLowestValue
    With fc.ColorScaleCriteria(1).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With
    fc.ColorScaleCriteria(2).Type = xlConditionValuePercentile
    fc.ColorScaleCriteria(2).Value = 50
    With fc.ColorScaleCriteria(2).FormatColor
        .Color = 5287936
        .TintAndShade = 0
    End With
    fc.ColorScaleCriteria(3).Type = xlConditionValueHighestValue
    With fc.ColorScaleCriteria(3).FormatColor
        .Color = 255
        .TintAndShade = 0
    End With

Next c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...