excel专业开发_一起学Excel专业开发23:使用类模块创建对象2

学习Excel技术,关注微信公众号:

excelperfect

本文是《一起学Excel专业开发22:使用类模块创建对象1》的后续内容。

在《一起学Excel专业开发22:使用类模块创建对象1》中,我们使用类模块创建了自已的对象CCell,通过这个对象可以创建任意多个对象实例,用来分析工作表或者多个区域中的单元格。

创建集合

当存在多个对象实例时,管理它们的最简单方法是将所有对象实例放到一个集合中。我们在VBE中,插入一个标准模块,输入代码:

'声明公共变量Public gcolCells As Collection Public Sub CreateCellsCollection()   Dim clsCell As CCell   Dim rngCell As Range       '创建新的Cells集合   Set gcolCells = New Collection       '对所选区域中的每个单元格创建Cell对象   For Each rngCell In Application.Selection       Set clsCell = New CCell       Set clsCell.Cell = rngCell       clsCell.Analyze        '添加Cell到集合       gcolCells.Add Item:=clsCell, Key:=rngCell.Address   Next rngCell       '显示存储的Cell对象的数量   MsgBox "存储的单元格数量:" & CStr(gcolCells.Count)End Sub

在CreateCellsCollection过程中,Set gcolCells = New Collection创建了一个新的集合实例。然后,For Each循环遍历所选区域的每个单元格,Set clsCell = New CCell为每个单元格创建一个CCell对象实例,集合对象的Add方法将这些实例添加到集合中,集合中每个元素项的关键字为单元格地址。

集合对象是VBA提供的内置对象,可用来保存对象和数据。集合对象对于存放在其中的数据的类型没有任何限制,不同类型的数据也可以存放在同一个集合对象中。集合对象有4种基本方法:

1.Add方法:添加集合元素项

2.Count方法:统计集合元素项数量

3.Item方法:获取集合元素

4.Remove方法:删除集合元素

可以通过下列方式来访问集合中的对象:

1.使用For Each循环语句逐个访问集合中的对象。

2.通过位置或关键字来访问集合中的单个对象。

注意,Item方法是集合对象的默认方法,因此对于上文中的示例,可使用下列代码访问特定的Cell对象:

SetrngCell = gcolCells(3) ‘访问集合中的第3个元素

SetrngCell = gcolCells(“$A$3”) ‘访问集合中关键字为$A$3的元素

我们可以控制添加到集合中的对象的类型,也可以在集合中添加一些新方法,例如,使用一个方法来高亮显示相同类型的单元格,再用另一个方法来取消这些高亮显示。

在CCell类模块中,增加两个新的方法。Highlight方法根据CellType的值对Cell对象添加颜色;UnHighlight方法取消这些颜色。

Public Sub Highlight()   Cell.Interior.ColorIndex = Choose(muCellType + 1, 5, 6, 7, 8)End Sub Public Sub UnHighlight()   Cell.Interior.ColorIndex = xlNoneEnd Sub

再插入一个新的类模块,将其命名为CCells,输入代码:

Private mcolCells As Collection Private Sub Class_Initialize()   Set mcolCells = New CollectionEnd Sub Property Get Count() As Long   Count = mcolCells.CountEnd Property Property Get Item(ByVal vID As Variant)As CCell   Set Item = mcolCells(vID)End Property Public Sub Add(ByRef rngCell As Range)   Dim clsCell As CCell   Set clsCell = New CCell   Set clsCell.Cell = rngCell   clsCell.Analyze   mcolCells.Add Item:=clsCell, Key:=rngCell.AddressEnd Sub Public Sub Highlight(ByVal uCellType AsanlCellType)   Dim clsCell As CCell   For Each clsCell In mcolCells       If clsCell.CellType = uCellType Then            clsCell.Highlight       End If   Next clsCellEnd Sub Public Sub UnHighlight(ByVal uCellType AsanlCellType)   Dim clsCell As CCell   For Each clsCell In mcolCells       If clsCell.CellType = uCellType Then            clsCell.UnHighlight       End If   Next clsCellEnd Sub

在CCells类模块中,集合对象变量mcolCells声明为私有的、模块级类型,Initialize过程对其进行实例化。

由于集合对象对于外部是不可见的,因此编写自已的Add方法,并且还创建Count和Item属性过程用于表示集合中的对应属性。将Item属性过程的输入参数声明为Variant型,使之既可以根据数值型的索引值,又可以根据字符型的关键字来获取相应的集合成员。

Highlight方法通过循环语句遍历集合中的每个成员,如果CCell对象的CellType属性和参数uCellType指定的类型值相同,则执行CCell对象的Highlight方法。同理,UnHighlight方法通过循环语句遍历集合中的每个成员,如果CCell对象的CellType属性和参数uCellType指定的类型值相同,则执行CCell对象的UnHighlight方法。

为了能引用新创建的自定义集合类,我们修改本文最开始的CreateCellsCollection过程:

'声明公共变量Public gclsCells As CCells Public Sub CreateCellsCollection()   Dim clsCell As CCell   Dim lIndex As Long   Dim lCount As Long   Dim rngCell As Range       '创建新的Cells集合   Set gclsCells = New CCells       '对当前工作表中已使用区域中的每个单元格创建Cell对象   For Each rngCell In Application.ActiveSheet.UsedRange       gclsCells.Add rngCell   Next rngCell       '统计集合中公式单元格的数量   For lIndex = 1 To gclsCells.Count       If gclsCells.Item(lIndex).CellType = anlCellTypeFormula Then            lCount = lCount + 1       End If   Next lIndex      MsgBox "公式单元格数量:" & CStr(lCount)End Sub

在上述代码中,声明了名为gclsCells的公共对象变量,用于存放自定义的CCells集合。CreateCellsCollection过程先将gclsCell实例化,使用For Each循环将当前工作表所使用区域内的单元格添加到集合中,然后统计集合中包含公式的单元格数目并显示统计结果。

下图1演示了高亮显示当前工作表中不同类型单元格:

61c9250ef584766870ab933138c9c258.gif

图1

下面的程序高亮显示工作表中包含公式的单元格:

Public Sub ShowFormulas()   gclsCells.Highlight anlCellTypeFormula   MsgBox "高亮显示公式单元格."   gclsCells.UnHighlight anlCellTypeFormulaEnd Sub

下面的程序高亮显示工作表中包含常量的单元格:

Public Sub ShowConstants()   gclsCells.Highlight anlCellTypeConstant   MsgBox "高亮显示常量单元格."   gclsCells.UnHighlight anlCellTypeConstantEnd Sub

下面的程序高亮显示工作表中的空单元格:

Public Sub ShowEmpties()   gclsCells.Highlight anlCellTypeEmpty   MsgBox "高亮显示空单元格."   gclsCells.UnHighlight anlCellTypeEmptyEnd Sub

下面的程序高亮显示工作表中包含标签的单元格:

Public Sub ShowLabels()   gclsCells.Highlight anlCellTypeLabel   MsgBox "高亮显示标签单元格."   gclsCells.UnHighlight anlCellTypeLabelEnd Sub

e7c3454cde0fa46488e1c8f1df804aa0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值