将整个行定义为范围的语法

问题描述 投票:5回答:3

在Excel中,我可以定义一个 整列 作为一个范围,并对该范围内的各个单元格进行寻址,比如。

Sub headache()
   Dim r As Range
   Set r = Range("A:A")
   MsgBox r(1).Address & vbCrLf & r(2).Address
End Sub

如果我试图用一个单元格来做同样的事情 整排:

Sub headache2()
   Dim r As Range
   Set r = Rows(1)
   MsgBox r(1).Address & vbCrLf & r(2).Address
End Sub

我没有得到范围内的各个单元格。 我的变通办法是:

Set r = Range(Cells(1, 1), Cells(1, Columns.Count))

我不相信这是最简单的方法......有什么建议吗?

excel vba excel-vba
3个回答
9
投票

你可以使用。

   Set r = Rows(1).Cells

或者直接使用:

   MsgBox r.Cells(1).Address & vbCrLf & r.Cells(2).Address

但是请注意,使用索引访问一个范围的Range(或Cells)属性将永远不会仅仅局限于该范围。


5
投票

行相当于

Set r = Range("A:A")

将是

Set r = Range("1:1")

我很好奇,就在Rory的答案基础上进行了这些测试。 也许有人能解释地址相同而计数不同的原因。

Sub test()
    Debug.Print Me.Range("A:A").Count '1048576
    Debug.Print Me.Columns(1).Count '1
    Debug.Print Me.Columns(1).Cells.Count '1048576

    Debug.Print Me.Range("1:1").Count '16384
    Debug.Print Me.Rows(1).Count '1
    Debug.Print Me.Rows(1).Cells.Count '16384

    'interseting to me since the counts are different but the addresses are the same
    Debug.Print Me.Range("1:1").Address '$1:$1
    Debug.Print Me.Rows(1).Address '$1:$1
    Debug.Print Me.Rows(1).Cells.Address '$1:$1
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.