在Excel中通过VBA创建多个区域

时间:2016-01-01 19:49:33

标签: excel vba excel-vba

我需要在Excel中将轮廓边框格式设置为多个范围。

这样的工作:

Union(Range("A1"), Range("B3")).BorderAround(...)

但是只要Ranges触摸,它们就会合并为一个范围,而边界将围绕整个合并范围。使用Range("A1,A2")方式有效,但在区域数量方面受到限制并赢得了胜利。工作

有没有办法,给定两个范围r1,r2,将它们作为一个范围内的单独区域,无论它们是否接触?

编辑: 一点澄清:

我或许有一千个地方想要给边界,有时候会感动。我想得到一个包含所有(正确区域)的单一范围,并对该单一范围进行操作。原因如下:

  1. 我可以更清楚地从函数返回范围,例如GetRangesThatNeedsBorder()
  2. 一次不做一个区域的表现原因。
  3. 对于该功能的用户来说,感觉更加正确和直观。
  4. 我不想使用"字符串方法"由于长度的限制,联合范围。我考虑过的几个选项:

    • 使用Union,但是以某种条纹模式创建两个单独的范围(仅在特定情况下有效),并进行两次调用。
    • 使用字符串方法,但在适当的位置拆分字符串。

    编辑2: 是对的:

    Public Sub test()
        Dim r As Range
        Set r = Union(Range("A1:A3"), Range("B1"), Range("B3"), Range("C1:C3"))
        Call r.BorderAround(2)
    End Sub
    

    失败,合并A1:A4:

    Public Sub test()
        Dim r As Range
        Set r = Union(Range("A1:A3"), Range("B1"), Range("B3"), Range("C1:C3"), Range("A4"))
        Call r.BorderAround(2)
    End Sub
    

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望以"A1,A2:A3,B1:B3,C3"之类的字符串中的地址开头。在这种情况下,这应该工作:

Sub OutlineManyCells()
Dim ws As Excel.Worksheet
Dim RangeAddress As String
Dim RangeAddresses As Variant
Dim i As Long

RangeAddress = "A1,A2:A3,B1:B3,C3"
Set ws = ActiveSheet
RangeAddresses = Split(RangeAddress, ",")
    For i = LBound(RangeAddresses) To UBound(RangeAddresses)
        ws.Range(RangeAddresses(i)).BorderAround LineStyle:=2
    Next i
End Sub

enter image description here

这解决了A1,A2和A3的问题,例如被合并到范围内的For Each Area中的单个区域(" A1,A2:A3,B1:B3,C3和#34;) ,同时让你把边界放在一组连续的细胞周围。

有关我的博文,请参阅:http://yoursumbuddy.com/undo-selections-selectracker/