如何沿着已经合并了VBA formatConditons

时间:2018-12-07 14:58:23

标签: excel vba

我有一张纸,其中B列中的单元格与下面的行合并。在其余的列中,行不合并。

我想添加一个VBA代码,该代码沿着合并的单元格的底部在整个行的底部绘制一条线。好像我想为所有列每隔一行绘制一个底边框(B除外,每个合并的单元格都有底边框)。我尝试使用以下代码,但未在合并的单元格下绘制边框

Sub FormatTest()

With Sheets("Test")

    With .Range("$B:$Z")
        .FormatConditions.Add xlExpression, Formula1:="=mod(row(),2)=0"
        With .FormatConditions(1).Borders(xlBottom)
          .LineStyle = xlContinuous
          .ColorIndex = xlAutomatic
          .TintAndShade = 0
          .Weight = xlThin
        End With
        .FormatConditions(1).StopIfTrue = False
    End With

End With
End Sub

这是我想要实现的目标的一个例子

Example

我想通过条件格式实现此目的,因为行数会不时变化,并且我不想在空单元格上有边框。

照片只是一个例子,因为有很多行,并且在不同的工作表上,我会有不同的列数,所以我只想将其应用于整行...有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试按照以下方式使用某些东西:

(可能只是需要修正row = 1才能获得正确的开始位置)

Dim row As Long
Dim lastRow As Long
Dim lCol As Long
Dim letter As String

With ThisWorkbook.Worksheets("your sheet name")
    ' clear previous borders
    .Range("A5:ZZ30000").Borders.Linestyle = xlNone
    ' add new borders
    lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
    lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column ' checks row 1 for last col
    letter = Split(.Cells(1, lCol).Address, "$")(1)
    For row = 1 To lastRow+1 Step 2
        With .Range("B" & row & letter & row).Borders(xlBottom)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With  
    Next
End With