Excel范围是什么?Rows属性真正做什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

好的,我正在为一个遗留的Excel-VBA应用程序完成一个附加项目,我再次遇到了神秘范围的难题。

有谁知道这些属性的真正作用以及它们应该为我提供什么?(注意:所有这些可能都适用于相应的*.Columns属性)。

我真的会就像要能够使用它,就需要返回一系列行,如下所示:

   SET rng = wks.Rows(iStartRow, iEndRow)

但是我从来没能让它做到这一点,尽管IntelliSense显示了两个论据。相反,我必须使用其他两到三种(非常疯狂)的技术之一。

这个帮助是非常没有帮助的(对于OfficeVBA来说通常是这样),谷歌搜索“行”并不是很有用,不管我在其中添加了多少其他术语。

我唯一能够使用它的事情是:1)返回一个行作为一个范围(Rng.Rows(I))和2)返回范围内行的计数(rng.Rows.Count)。是这样吗?真的没有其他的好处吗?

我知道它返回一个范围,还有其他方法可以得到一个范围的行。我想要的是,我们从.rws()那里得到了什么,而我们还没有从.cells()和.Range()那里得到什么呢?我知道的两件事是:1)返回单个行范围的更简单的方法;2)计算范围内行数的方法。

还有别的事吗?

提问于
用户回答回答于

Range.RowsRange.Columns返回基本上相同的范围,除非新范围有一个标志,该标志指示它表示行或列。这对于一些Excel属性(如Range.Count和Range.Hidden)和某些方法(如Range.AutoFit():

  • Range.Rows.Count返回范围内的行数。
  • Range.Columns.Count返回范围内的列数。
  • Range.Rows.AutoFit()自动安装范围内的行。
  • Range.Columns.AutoFit()自动安装范围内的列。

你可能会发现Range.EntireRowRange.EntireColumn是有用的,尽管它们仍然不是你要找的东西。它们返回所有可能的列EntireRow和所有可能的行EntireColumn代表的范围。

我知道这是因为.NET它附带的.NET API非常类似于Excel的API。附带了几个强类型的重载到IRange索引器,包括可能希望Excel拥有的:

  • IRange this[int row1, int column1, int row2, int column2];
用户回答回答于

Range.Rows,Range.Columns和Rang.Cells是Excel.Range对象,根据VBA Type()函数:

?TypeName(Selection.rows)
Range

然而,这并不是全部:这些返回的对象是继承Excel::Range-但是.Columns和.Row的每个属性和方法的扩展类型。每个迭代器和一个特殊的.Count属性相当与父Range对象的迭代器和计数相同。

因此.Cells被迭代并被计算为单个单元格范围的集合,就像父区域的默认迭代器一样。

但是。柱被迭代并被计算为一个垂直子范围的集合,每个子范围都有一列宽;

.Row被迭代,并被计算为水平子范围的集合,每个子范围都有一个一行高。

理解这一点的最简单方法是逐步完成这些代码并查看所选内容:

Public Sub Test() 

Dim SubRange As Range
Dim ParentRange As Range 

Set ParentRange = ActiveSheet.Range("B2:E5") 
 

For Each SubRange In ParentRange.Cells
    SubRange.Select
Next  

For Each SubRange In ParentRange.Rows
    SubRange.Select
Next 

For Each SubRange In ParentRange.Columns
    SubRange.Select
Next 

For Each SubRange In ParentRange
    SubRange.Select
Next 

End Sub

好好享受吧。然后在里面加入几个合并的单元格,看看奇数合并的范围可以是。

扫码关注云+社区