Excel VBA - 范围联盟及其子范围

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 = 1uRng.Columns.Count = 10.我错了预期uRng3x10范围?或者是不确定的,因为的位置aRng,bRngcRng对方没有规定?

mr.*_*and 9

它们实际上被视为三个独立的范围,可uRng通过Range.Areas物业进入:

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.areas(v=office.11​​).ASPX

使用您的示例,这里是如何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)

  • 有趣的...`uRng.Areas(2).Cells(2,1).Select`选择"A5".谢谢 (2认同)