【发布时间】:2017-09-19 22:30:00
【问题描述】:
我正在学习 VBA,但对于 Range() 对 VBA 的理解,我感到非常困惑。我对 OOP 和 Java / Python 等语言有相当扎实的掌握,但 VBA 让我在这里陷入了一个循环。
我尝试使用时遇到错误
Set MyRange = Range(ActiveCell, Range(ActiveCell.End(xlDown)))
我知道正确的解决方案是
Set MyRange = Range(ActiveCell,ActiveCell.End(xlDown))
但我试图理解为什么会这样。该错误专门来自Range(ActiveCell.End(xlDown))。我知道.End() 从MSDN documentation 返回一个Range 对象。
但是,当我写的时候
MsgBox (TypeName(ActiveCell))
我被告知ActiveCell 是一个Range 对象。 Range("A1") 工作得非常好(当然),而 Range(ActiveCell) 抛出一个错误,所以我想这证实了 Range() 不接受 Range 对象。
但是,"A1" 显然是 String。当我在 VBA 编辑器中输入 Range() 时,我看到 Range() 接受 Cell 作为参数参数。那么Cell 和Range 在VBA 的世界中是什么关系? Range 是否继承自 Cell?我对为什么Range() 接受其他Range 对象以及String 感到困惑?
如果Range() 不接受Range 对象作为参数,那么为什么下面这段代码会起作用?
Range("A2", Range("A2").End(xlDown).End(xlToRight))
.End() 不是在这里返回 Range 对象吗?
【问题讨论】: