【发布时间】:2021-09-14 14:38:37
【问题描述】:
我需要在 Excel 中为多个范围设置轮廓边框格式。
这样的工作:
Union(Range("A1"), Range("B3")).BorderAround(...)
但是一旦 Ranges 接触,它们就会合并成一个范围,而边框将围绕整个合并的范围。使用Range("A1,A2") 方式有效,但在区域数方面受到限制并且不会工作。
在给定两个范围 r1、r2 的情况下,有什么方法可以将它们作为单个范围中的单独区域,无论它们是否接触?
编辑: 一点澄清:
我可能有一千个我想给边界的区域,有时是触摸的。我想获得一个包含所有(正确区域)的单个范围并在该单个范围上执行操作。原因:
- 我可以更清晰地从函数返回范围,例如
GetRangesThatNeedsBorder(). - 一次不做一个区域的性能原因。
- 该功能的用户感觉更正确、更直观。
由于长度限制,我不想使用联合范围的“字符串方法”。我考虑过的几个选项:
- 使用联合,但创建两个单独的范围,以一种条纹模式(仅在特定情况下有效),并执行两次调用。
- 使用字符串方法,但在适当的位置拆分字符串。
编辑 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
【问题讨论】:
-
为什么不这样做
FOR EACH ...? -
@DirkReichel,我认为问题在于,如果您执行
For Each Area in Range...,它会将相邻的单元格合并到一个区域中。另一方面,For Each Cell会在每个单元格周围设置边框。 -
鉴于您对我的回答的评论,并重新阅读您的问题,我的主要问题是您在谈论多少范围变量?
-
如果我没听错的话,A1:A3、B1、B3 和 C1:C3 看起来就像 B2 和 A1:C3 周围的边界......对吗?
-
@DirkReichel 我想我知道你要去哪里,但没有。这将给出 4 个区域。这些区域只有在可以制成单个矩形时才被连接起来。