gpt4 book ai didi

vba - VBA 中 Cell 和 Range() 与 ActiveCell 的关系

转载 作者:行者123 更新时间:2023-12-04 21:15:12 24 4
gpt4 key购买 nike

我正在学习 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()返回 Range来自 MSDN documentation 的对象.

然而,当我写
MsgBox (TypeName(ActiveCell))

我被告知 ActiveCellRange目的。 Range("A1")工作得很好(当然),而 Range(ActiveCell)抛出一个错误,所以我想这证实了 Range()不接受 Range对象。

但是, "A1"显然是 String .当我输入 Range()进入我的 VBA 编辑器,我看到 Range()接受 Cell作为参数参数。那么 Cell之间的关系是什么?和 RangeVBA 的世界中?是否 Range继承自 Cell ?我很困惑为什么 Range()接受其他 Range对象,还有 String ?

如果 Range()不接受 Range对象作为参数,那么为什么下面这段代码会起作用?
Range("A2", Range("A2").End(xlDown).End(xlToRight))
不是 .End()返回 Range反对在这里?

最佳答案

Range 正在寻找一个字符串,该字符串表示一个单元格地址或两个表示范围范围的范围对象。

ActiveCell 本身就是一个范围对象。因此,在 Range 内使用它时:

Range(ActiveCell.End(xlDown))



该范围正在寻找第二个范围对象。

您可以将地址作为字符串返回:

Range(ActiveCell.End(xlDown).Address)



这会起作用,但会迫使 vbe 进行大量转换。这就像将直流电转换为交流电再转换为直流电为手机充电。

只需使用:

ActiveCell.End(xlDown)



随着范围对象的工作。
Set MyRange = Range(ActiveCell, ActiveCell.End(xlDown))

这就是原因 Range("A2", Range("A2").End(xlDown).End(xlToRight))作品。您正在返回两个范围对象。 vbe 假定 "A2"在范围的第一位是 Range("A2")

Range(Range("A2"), Range("A2").End(xlDown).End(xlToRight))



每个内部范围都使用字符串来创建范围对象。

你的第一个是这样的:

Range("A2", Range(Range("A2")).End(xlDown).End(xlToRight))



正如您所看到的,第二个 Range 现在正试图找到一个只有一个范围对象的范围,并且它需要两个才能成为可行的范围。

关于vba - VBA 中 Cell 和 Range() 与 ActiveCell 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com