将相同的宏应用于各种范围

时间:2016-08-26 18:53:32

标签: excel vba macros range

我有一个代码可以完成我想要它做的事情,但它是巨大的,因为我使用宏录制器来制作它。基本上,它选择一个范围,应用两个条件格式并转到下一个范围。我无法一次选择整个范围,因为条件格式会在每个范围内应用AVERAGE

这是一段代码:

 Sub DesvPad()

    Range("C3:N3").Select
    Selection.FormatConditions.AddAboveAverage
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).AboveBelow = xlAboveStdDev
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 5296274
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).NumStdDev = 1
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.AddAboveAverage
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).AboveBelow = xlBelowStdDev
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 49407
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).NumStdDev = 1
    Selection.FormatConditions(1).StopIfTrue = False
MsgBox "O macro foi executado até Range(C325:N325)"

End Sub

我知道这是可耻的,所以我会感激任何帮助!

2 个答案:

答案 0 :(得分:0)

我认为这可能有所帮助:

Sub formatInMySelectedSheets() 'use this just for few sheet
                               'that you want to change
    Dim i As Worksheet
    Dim Nm(1 To 3) As String
    Dim s
    Dim sht As Worksheet

    'Imagine the book has 10 sheets, "Sheet1" to "Sheet10"
    'but you only want to go to Sheet1, Sheet4 and Sheet7

    Nm(1) = "Sheet1" 'this are the sheets you want to change
    Nm(2) = "Sheet4"
    Nm(3) = "Sheet7"

    For Each i In ActiveWorkbook.Worksheets 'the workbook with the sheets...

        For s = LBound(Nm) To UBound(Nm) 'from the lowest value of the array to
                                         'to the highest
            Set sht = Sheets(Nm(s))
            'here the code shows the sheet to avoid some errors
            'if the sheet is hidden, Show it to  me!
            If sht.Visible = xlSheetVeryHidden Or sht.Visible = xlSheetHidden Then
                sht.Visible = xlSheetVisible
            End If
            'go to the sheet
            sht.Activate
            DesvPad 'Calls you code
        Next s
    Next i
End Sub

Sub formatInEverySheet() 'Use this to do it in every sheet
                         'no matter what!
    Dim i As Worksheet
    For Each i In ActiveWorkbook.Worksheets
        i.Activate
        ' here the code shows the sheet to avoid some errors
        If i.Visible = xlSheetVeryHidden Or i.Visible = xlSheetHidden Then
            i.Visible = xlSheetVisible
        End If
        DesvPad 'Calls you code
    Next i
End Sub

答案 1 :(得分:0)

目前还不清楚你的问题是什么,但我猜你会问如何使你的代码更“模块化”“

Sub Tester()
     ApplyCF  Range("A1:A10")
     ApplyCF  Range("A11:A20")
     'etc
End Sub


Sub ApplyCF(rng As Range)

    'here use rng instead of "Selection"
    rng.FormatConditions.AddAboveAverage '<< for example

End Sub