首页 > 解决方案 > 如何在多个范围内调用函数

问题描述

我有一个格式化范围的函数,但它似乎只是格式化我选择的第一个范围。

我试过先选择范围然后格式化,但它会延长我的代码。

Sub Numbers()

    Call format(Range(Cells(4, "A"), Cells(2 + i - j, "AA")))

    Call format(Range(Cells(4, "C"), Cells(4 + i - j, "F")))

    Call format(Range(Cells(4, "G"), Cells(4 + i - j, "J")))

End Sub

Sub format(R As Range)

    With R
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .weight = xlMedium
        End With

    End With

End Sub

我想格式化所有范围,但它只格式化第一个范围,即:仅格式化 ->Range(Cells(4, "A"), Cells(2 + i - j, "AA"))

标签: excelvba

解决方案


您可以在主子中循环并调用format子 x 次或修改format子以使用ParamArray. format这将允许您在一行中将任意数量的范围传递给子

Sub formatRange(ParamArray rngs() As Variant)
    Dim i As Long

    For i = 0 To UBound(rngs)
        If TypeName(rngs(i)) = "Range" Then
            With rngs(i)
                Debug.Print i, .Address, TypeName(rngs(i))

                .Borders(xlDiagonalDown).LineStyle = xlNone
                .Borders(xlDiagonalUp).LineStyle = xlNone
                With .Borders(xlEdgeLeft)
                    .LineStyle = xlContinuous
                    .ColorIndex = 0
                    .TintAndShade = 0
                    .Weight = xlMedium
                End With
            End With
        End If
    Next i
End Sub

Sub test()
    formatRange Range("A1"), Range("A2"), Range("A3")
    formatRange Range("B5"), Range("I6")
    ' etc. etc....
End Sub

推荐阅读