在Excel中通过VBA创build多个区域
我需要在Excel中将轮廓边框格式设置为多个范围。
像这样的作品:
Union(Range("A1"), Range("B3")).BorderAround(...)
但只要范围触及,它们就会合并成一个范围,而边界将在整个合并范围内。 使用Range("A1,A2")
方式工作,但在区域的数量有限,赢得了工作。
有没有什么办法,给定两个范围r1,r2,让他们作为单独的领域在一个单一的范围内,无论他们是否接触?
编辑:一点澄清:
我可能有一千个地方我想给国界,有时候会感动。 我想得到一个包含所有(正确的区域)的单个区域,并在单个区域上进行操作。 原因是:
- 我可以更干净地从函数返回范围,例如
GetRangesThatNeedsBorder()
。 - 性能的原因,一次不做一个领域。
- 这个function的用户感觉更正确和直观。
由于长度限制,我不想使用联合范围的“string方法”。 我考虑过几个选项:
- 使用联盟,但创build两个单独的范围,在一种条纹的模式(只在特定情况下),并做两次调用。
- 使用string方法,但在适当的位置拆分string。
编辑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
如果我理解正确,你想从一个像"A1,A2:A3,B1:B3,C3"
这样的string开始。 在这种情况下,这应该工作:
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
这样可以解决A1,A2和A3的问题,例如,将“范围内的每个区域”(“A1,A2:A3,B1:B3,C3”)合并为一个区域,连续的细胞。
对于我的一个有点相关的博客文章,请参阅:http: //yoursumbuddy.com/undo-selections-selectracker/