che*_*eak 7 excel vba excel-vba
考虑excel中的以下vba宏
Sub foo()
Dim aRng As Range: Set aRng = ActiveSheet.Range("A1:J1")
Dim bRng As Range: Set bRng = ActiveSheet.Range("A4:J4")
Dim cRng As Range: Set cRng = ActiveSheet.Range("A10:J10")
Dim uRng As Range: Set uRng = Union(aRng, bRng, cRng)
uRng.Style = "Good"
uRng.Cells(2, 1).Style = "Bad"
End sub
Run Code Online (Sandbox Code Playgroud)
结果是:第1行"A1:J1", "A4:J4", "A10:J10"是好的,细胞"A2"是坏的.我预计细胞"A4"会很糟糕."A2"不在uRng; 为什么会被退回uRng.Cells(2,1)?
其他奇怪之处:uRng.Rows.Count = 1和uRng.Columns.Count = 10.我错了预期uRng3x10范围?或者是不确定的,因为的位置aRng,bRng和cRng对方没有规定?
它们实际上被视为三个独立的范围,可uRng通过Range.Areas物业进入:
使用您的示例,这里是如何A4包含,作为第二个范围中的第一个单元格:
Sub foo()
Dim aRng As Range: Set aRng = ActiveSheet.Range("A1:J1")
Dim bRng As Range: Set bRng = ActiveSheet.Range("A4:J4")
Dim cRng As Range: Set cRng = ActiveSheet.Range("A10:J10")
Dim uRng As Range: Set uRng = Union(aRng, bRng, cRng)
uRng.Style = "Good"
uRng.Areas(2).Cells(1, 1).Style = "Bad"
End Sub
Run Code Online (Sandbox Code Playgroud)
另外,下面的代码会给你相同的结果:
Sub foo2()
Dim uRng As Range: Set uRng = [A1:J1,A4:J4,A10:J10]
uRng.Style = "Good"
uRng.Areas(2).Cells(1, 1).Style = "Bad"
End Sub
Run Code Online (Sandbox Code Playgroud)