Yu *_*hen 1 excel vba excel-vba
我学习VBA并且真的很困惑Range()VBA 究竟需要什么.我对OOP和Java/Python等语言有着非常扎实的把握,但是VBA在这里给我一个循环.
我尝试使用时出错
Set MyRange = Range(ActiveCell, Range(ActiveCell.End(xlDown)))
Run Code Online (Sandbox Code Playgroud)
我知道正确的解决方案是
Set MyRange = Range(ActiveCell,ActiveCell.End(xlDown))
Run Code Online (Sandbox Code Playgroud)
但我试图理解为什么会这样.该错误特别来自Range(ActiveCell.End(xlDown)).我知道从MSDN文档中.End()返回一个Range对象.
但是,当我写作
MsgBox (TypeName(ActiveCell))
Run Code Online (Sandbox Code Playgroud)
我被告知这ActiveCell是一个Range对象.Range("A1")工作完全正常(当然),同时Range(ActiveCell)抛出一个错误,所以我想这证实了Range()没有接受Range对象.
但是,"A1"显然是一个String.当我输入Range()我的VBA编辑器时,我看到它Range()接受Cell作为参数参数.那么a Cell和a 之间的关系Range是VBA什么?是Range继承自Cell?我很困惑为什么Range()接受其他Range对象,还有String?
如果Range()不接受Range对象作为参数,那么为什么这段代码可以工作呢?
Range("A2", Range("A2").End(xlDown).End(xlToRight))
这里没有.End()退回Range物品吗?
范围正在查找表示单元格地址的字符串或两个记录范围范围的范围对象.
ActiveCell本身就是一个范围对象.所以在Range中使用它时:
Range(ActiveCell.End(xlDown))
范围正在寻找第二个范围对象.
您可以将地址作为字符串返回:
Range(ActiveCell.End(xlDown).Address)
哪个会起作用但会迫使vbe做很多转换.这就像将DC电源转换回AC直流电为手机充电一样.
简单地使用:
ActiveCell.End(xlDown)
作为范围对象的工作原理.
Set MyRange = Range(ActiveCell, ActiveCell.End(xlDown))
Run Code Online (Sandbox Code Playgroud)
这是有道理的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现在正在尝试查找仅包含一个范围对象的范围,并且需要两个才能成为可行范围.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |