从范围获取行时需要VBA对象

时间:2016-08-11 14:35:21

标签: vba excel-vba excel

我试图从函数中的范围对象中提取单行。该范围被声明为变体,然后设置为我的工作表中的范围。我希望能够选择一个特定的行,因此我尝试拨打.Rows(indexfrom, indexto),但收到错误Object Required。我尝试过设置compareRow而不仅仅是声明它,但这似乎并没有改变任何东西。我相信这是因为callLogRange仅作为范围对象的引用而存在。如果是这种情况,我如何使用引用从范围中获取行?或者,我只是遗漏了一些能让你获得这一行的东西吗?

谢谢。

Dim callLogRange As Variant
callLogRange = (Sheets("CallLog").Range("B2:L" & lastRow))

Dim compareRow As Variant
compareRow = callLogRange.Rows(thisRow, thisRow)

2 个答案:

答案 0 :(得分:3)

将它们调暗为Ranges并使用Set

Sub dural()
    Dim callLogRange As Range, thisRow As Long, lastRow As Long
    lastRow = 13

    Set callLogRange = Sheets("CallLog").Range("B2:L" & lastRow)

    thisRow = 5
    Dim compareRow As Range
    Set compareRow = callLogRange.Rows(thisRow)

    MsgBox compareRow.Address(0, 0)
End Sub

enter image description here

修改#1:

  • 单元格位于工作表的第六行中,该行是主要范围的第五行
  • 如果您在没有compareRow的情况下实例化Set,则实际上是在创建内部 VBA 数组而不是Range

答案 1 :(得分:2)

删除括号。

此:

callLogRange = (Sheets("CallLog").Range("B2:L" & lastRow))

Sheets("CallLog").Range("B2:L" & lastRow)评估为。删除括号,您将分配一个2D数组。

Set引用,您将分配Range对象引用,如Gary's answer