VBA "For Each" 366 列左边框格式代码

VBA "For Each" code for left border formatting in 366 columns

我一直在网上搜索,但找不到任何解决方案。必须有一种方法可以大大缩短此 VBA 代码(见下文)。第 4 行中以 H4 开头的单元格与第 5 行中保存日期的单元格相关。如果 H5 是该月的第一天,则 H4 的值为“Ja”(瑞典语中的“是”)。如果该语句为 TRUE,则范围 H7:H106 的左边框应为黑色,如果为 FALSE,则同一范围的左边框应为白色。在我的代码中,我必须使用定义的范围和唯一的单元格引用。问题是,我需要 365 列的代码!这是我的版本:

Sub FirstDayLine()

Dim r1, r2, r3, r4, r5 As Range

Set r1 = Range("H7:H106")
Set r2 = Range("I7:I106")
Set r3 = Range("J7:J106")
Set r4 = Range("K7:K106")
Set r5 = Range("L7:L106")

If Range("H4").value = "Ja" Then
r1.Borders(xlEdgeLeft).color = vbBlack
Else
r1.Borders(xlEdgeLeft).color = vbWhite
End If

If Range("I4").value = "Ja" Then
r2.Borders(xlEdgeLeft).color = vbBlack
Else
r2.Borders(xlEdgeLeft).color = vbWhite
End If

If Range("J4").value = "Ja" Then
r3.Borders(xlEdgeLeft).color = vbBlack
Else
r3.Borders(xlEdgeLeft).color = vbWhite
End If

If Range("K4").value = "Ja" Then
r4.Borders(xlEdgeLeft).color = vbBlack
Else
r4.Borders(xlEdgeLeft).color = vbWhite
End If

If Range("L4").value = "Ja" Then
r5.Borders(xlEdgeLeft).color = vbBlack
Else
r5.Borders(xlEdgeLeft).color = vbWhite
End If

End Sub

我知道这一切都可以通过一些“For Each”编码来解决,但我做对了。

你提到的 For Each 循环:

Dim cell As Range
For Each cell in Range("I4:L4")
    Dim rng As Range
    Set rng = cell.EntireColumn.Rows("7:106")

    If cell.Value = "Ja" Then
        rng.Borders(xlEdgeLeft).color = vbBlack
    Else
        rng.Borders(xlEdgeLeft).color = vbWhite
    End If
Next

不过,如评论中所述,这很容易通过条件格式实现。