excel范围似乎保留了有关创建原因的信息
看看这个例子:我已经创建了一个“常规”范围,并从中 两个范围:一个通过调用“columns”属性,另一个通过调用“rows”属性。 现在,虽然它们似乎也是规则范围,并且它们引用相同的工作表区域,但默认方法的行为不同excel范围似乎保留了有关创建原因的信息,excel,vba,Excel,Vba,看看这个例子:我已经创建了一个“常规”范围,并从中 两个范围:一个通过调用“columns”属性,另一个通过调用“rows”属性。 现在,虽然它们似乎也是规则范围,并且它们引用相同的工作表区域,但默认方法的行为不同 Public Sub RangeTest01() Dim r As Range ' i get a 'regular' range on the active sheet of 3 columns and 3 rows Set r = ActiveSheet.Range("A1:
Public Sub RangeTest01()
Dim r As Range
' i get a 'regular' range on the active sheet of 3 columns and 3 rows
Set r = ActiveSheet.Range("A1:C3")
Dim rr As Range
Set rr = r.Rows
Debug.Print "rr: range generated by the call 'Rows' on the original range"
Debug.Print "1. what kind of object is it? " & TypeName(rr)
Debug.Print "2. what are the sheet cell it refers to? " & rr.Address
Debug.Print "3. what does the default method call produce?" & rr(1).Address
Dim rc As Range
Set rc = r.Columns
Debug.Print "rc: range generated by the call 'Columns' on the original range"
Debug.Print "1. what kind of object is it? " & TypeName(rc)
Debug.Print "2. what are the sheet cell it refers to? " & rc.Address
Debug.Print "3. what does the default method call produce?" & rc(1).Address
End Sub
输出
问题
因此,并不是同一数据上的所有范围都“被创建为相等”,我能找到的关于我在这里看到的行为的最好描述是“一个范围保留了关于其创建原因的信息”,并且根据这些信息的不同行为
因此,如果它是为处理列而创建的,它将保留一种“基于列”的标志,如果它是为处理行而创建的,则相反
问题是:
这条信息可以访问吗?是否存在其他类型的“变化”范围或其他对象,这些范围或对象应在其起源地查看,以了解其行为方式?您正在创建一个对象,其中包含一系列由列对象或行对象分割的范围,它们的行为方式不同,因为您使用不同的方法定义了它们 如果您执行了
rcells=r.cells
并运行相同的进程,我相信它会输出
$A$1:$A$1第三点。或者可能只是$A$1,这会很有趣 创建的对象包含由列对象或行对象分割的一系列范围,它们的行为不同,因为您使用不同的方法定义了它们 如果您执行了
rcells=r.cells
并运行相同的进程,我相信它会输出
$A$1:$A$1第三点。或者可能只是$A$1,这会很有趣 我不知道有什么方法可以确切地区分不同创建的范围,但另一方面,我认为也没有必要 由于范围对象是一个类似集合的对象,包含一组(有序的)其他范围,因此可以通过索引对其进行迭代和寻址。 让我们看一看以下范围属性,这些属性根据应用到的范围本身返回另一个范围对象:
-包含当前范围内划分为单行的所有单元格行
-包含当前范围内划分为单列的所有单元格列
-包含当前范围内的所有单元格,一个接一个地划分为单个单元格(如果迭代,则得到第一行的单元格,逐列,然后第二行的单元格相同,依此类推)单元格
-包含工作表中按行划分的所有单元格,但仅包含当前范围所覆盖的行:设想当前范围扩展到所有列EntireRow
-包含工作表中被列分割的所有单元格,但仅包含当前范围所覆盖的列:设想当前范围扩展到所有行entireclumn
例如,考虑像这样改变代码:
Set rr = r.Rows.Columns
...
Set rc = r.Columns.Rows
输出将是相同的,只是在两个块之间切换。以前的行列表变成了列列表,反之亦然。我不知道有什么方法可以确切地区分不同创建的范围,但另一方面,我认为也没有必要 由于范围对象是一个类似集合的对象,包含一组(有序的)其他范围,因此可以通过索引对其进行迭代和寻址。 让我们看一看以下范围属性,这些属性根据应用到的范围本身返回另一个范围对象:
-包含当前范围内划分为单行的所有单元格行
-包含当前范围内划分为单列的所有单元格列
-包含当前范围内的所有单元格,一个接一个地划分为单个单元格(如果迭代,则得到第一行的单元格,逐列,然后第二行的单元格相同,依此类推)单元格
-包含工作表中按行划分的所有单元格,但仅包含当前范围所覆盖的行:设想当前范围扩展到所有列EntireRow
-包含工作表中被列分割的所有单元格,但仅包含当前范围所覆盖的列:设想当前范围扩展到所有行entireclumn
例如,考虑像这样改变代码:
Set rr = r.Rows.Columns
...
Set rc = r.Columns.Rows
输出将是相同的,只是在两个块之间切换。以前的行列表变成了列列表,反之亦然。@AgostinoX:这能回答你的问题吗