Excel Range
类似乎有一个未记录的属性,用于确定Item
,Cells
和Count
属性的工作方式(以及其他类方法)和属性,最有可能)。
普通Range
似乎有" Cell"配置;即访问其属性需要一个Cell索引。
Set x = [A1:H50]
?TypeName(x)
Range
?x.Address
$A$1:$H$50
?x.Count
400
?x(20).Address
$D$3
但你也可以获得一个" Column"或" Row" -dispositioned Range
,其行为不同。
Set x = [A1:H50].Columns
?TypeName(x)
Range
?x.Address
$A$1:$H$50
?x.Count
8
?x(20).Address
$T$1:$T$50
我试图为Range
编写一个包装类,它的行为优于多个Area
范围的内置类型。我想更好地了解这个范围"配置"作品。是否有内置属性或其他简单的方法来测试"配置"一个Range
对象有?是"处置"范围的不可变属性或有没有办法改变它而不使用" Rows"," Columns"或" Cells"特性
答案 0 :(得分:1)
我没有意识到这种行为甚至存在。我查看了Range Object的属性列表,但是找不到满足包装器需求的任何东西。相反,我写了一个函数,我认为它告诉你" Disposition",我称之为方向。
.carousel-inner > .item {
-webkit-perspective: initial !important;
perspective: initial !important;
-webkit-transition: initial;
-o-transition: initial;
transition: initial;
-webkit-transform: initial !important;
transform: initial !important;
}
答案 1 :(得分:1)
返回 Range 对象,该对象表示指定的列 范围
表示它返回Collection
列,以便.Count
返回集合元素的数量,即列数
但它也增加了:
当应用于多区域选择的Range对象时,这个 property仅从范围的第一个区域返回列。对于 例如,如果Range对象有两个区域 - A1:B2和C3:D4 - Selection.Columns.Count返回2,而不是4。
虽然立即给出了出路:
在可能包含多个区域的范围内使用此属性 选择,测试Areas.Count以确定范围是否包含 不止一个地区。如果是,则遍历范围
中的每个区域
因此需要一些包装器来增强Range
对象的默认成员
这将是extension methods
的完美空间,遗憾的是在VBA中无法实现
所以下一步应该是定义一个Class
例如,您可以添加一个名为" MyRange"的新类。使用以下代码:
Option Explicit
Dim rng As Range
Public Property Set Range(r As Range)
Set rng = r
End Property
Public Property Get Range() As Range
Set Range = rng
End Property
Function ColumnsCount() As Long '<-- your personalized "Columns.Count" function correctly calculates the number of columns of your range
Dim area As Range
If rng Is Nothing Then Exit Function
For Each area In rng.Areas
ColumnsCount= ColumnsCount+ area.Columns.Count
Next area
End Function
你的代码会利用那个&#34; MyRange&#34;分类如下
Option Explicit
Sub main()
Dim rng As Range ' "normal" range type
Dim myRng As MyRange ' your "personalized" range type
Set rng = Range("A1:B2, C3:D5") '<-- set a "normal range" object
Set myRng = New MyRange '<--| set your "personalized range" object
Set myRng.Range = rng '<-- give it the "normal" range as its "rng" property
MsgBox rng.Columns.Count '<-- this will return 2
MsgBox myRng.ColumnsCount '<-- this will return 4
End Sub