通过范围对象设置范围->范围对象失败?

时间:2019-04-22 11:47:06

标签: vba set range

有人可以帮我调试这段代码吗?

....    
Dim searchRng as Range

With Sheets("Database")

    Set searchRng = Range("pointer.address:.cells(pointer.End(xlDown).Row,pointer.Column).address") 

End with

我不断收到错误1004:对象“ _Global”的方法“ Range”失败 “指针”是一个单元格(B6)的预先定义的范围。 经过各种调试尝试,问题似乎与.address有关……据我所能追溯到那为止。

提前谢谢! 狮子座

1 个答案:

答案 0 :(得分:2)

这里的问题是,引号用于将范围名称传递给.Range()对象,但是要向其传递调用.address方法的结果。如果将这些方法调用放在引号中,则VBA不会运行它们,而是尝试将它们中包含的内容解释为所引用范围的名称。您需要使用这些方法构造范围名称字符串,并将结果传递到.Range()对象。

有几种方法可以做到这一点。第一个将范围名称的结构分离出来,并将其分配给一个变量,然后可以将该变量传递给.Range()

Sub test()

Dim searchRng As Range
Dim CllNameA As String
Dim CllNameB As String
Dim CllRange As String

With Sheets("Database")
    CllNameA = .Range("pointer").Address
    CllNameB = .Range("pointer").End(xlDown).Address


    CllRange = CllNameA & ":" & CllNameB


    Set searchRng = .Range(CllRange)


End With

End Sub

下一个子例程将相同的方法浓缩为一行。它仍然在做同样的事情,但是由于一次完成所有操作,因此对于人类读者来说,要理解它要困难一些。

Sub test2()

Dim searchRng As Range

With Sheets("Database")

    Set searchRng = .Range(.Range("pointer").Address & ":" & .Range("pointer").End(xlDown).Address)

End With

End Sub

还有其他方法可以实现相同的目标,但是我希望这至少可以使您走上正确的道路。

相关问题