0

テーブルの条件付き書式設定マクロ (Jeeped に感謝) があり、これを拡張して、さまざまなワークシートのすべてのテーブルをループ処理したいと考えています。これは最も効率的なアプローチではないと思いますが、一緒に石畳にできる最善の方法であり、それでも機能していません。これまでのところ、私は以下の2点で立ち往生しています。どんな支援も大歓迎です!

1) ws を複数のワークシート コードネームに等しく設定する (例: Set ws = Worksheets(5,6,7))

2) 実行時エラーなしで範囲を設定すると、Set myRange = ws.ListObjects.DataBodyRange「実行時エラー '438': オブジェクトはこのプロパティまたはメソッドをサポートしていません」が生成されます。

現在のコードは次のとおりです。

Sub ConditionalFormatting()
    Dim ws As Excel.Worksheet
    Dim lo As Excel.ListObject
    Dim myRange As Range

    Set ws = Worksheet(5) 'Would like to expand to include multiple worksheets!
    Set myRange = ws.ListObjects.DataBodyRange

    For Each lo In ws.ListObjects
        With lo.FormatConditions
            .FormatConditions.Delete
            Call FormatRange(myRange, 10, "$E5=INDEX(Location,1,1)") 'Warehouse1
            Call FormatRange(myRange, 10, "$E5=INDEX(Location,2,1)") 'Warehouse2
            Call FormatRange(myRange, 10, "$E5=INDEX(Location,3,1)") 'Warehouse3
        End With
    Next lo
End Sub

Public Sub FormatRange(r As Range, clr As Integer, frml As String)
    r.FormatConditions.Add Type:=xlExpression, Formula1:=frml
    r.FormatConditions(r.FormatConditions.Count).Font.colorindex = clr

    With r.FormatConditions(1).Borders(xlTop)
        .LineStyle = xlContinuous
        .Color = color
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With r.FormatConditions(1).Borders(xlBottom)
        .LineStyle = xlContinuous
        .Color = color
        .TintAndShade = 0
        .Weight = xlThin
    End With
    r.FormatConditions(1).StopIfTrue = False
End Sub
4

3 に答える 3

2

未テスト:

Sub ConditionalFormatting()
    Dim ws As Excel.Worksheet
    Dim lo As Excel.ListObject
    Dim myRange As Range
    Dim i


    For Each i in Array(5, 6, 7)

        Set ws = Worksheets(i)     

        For Each lo In ws.ListObjects

            Set myRange = lo.DataBodyRange

            myRange.FormatConditions.Delete
            FormatRange myRange, 10, "$E5=INDEX(Location,1,1)" 'Warehouse1
            FormatRange myRange, 10, "$E5=INDEX(Location,2,1)" 'Warehouse2
            FormatRange myRange, 10, "$E5=INDEX(Location,3,1)" 'Warehouse3

        Next lo

    Next i

End Sub
于 2015-01-03T01:32:28.663 に答える