暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第三讲:过程Sub、函数Function、集合Collection的作用范围域

VBA语言専攻 2023-05-08
120
【分享成果,随喜正能量】有多少过往可以纠缠不休,又有多少沉重还能背负多久,幸福是什么?放下即是。幸福是什么?解脱就是。幸福是什么?从今以往,重新上路。是一种发现自我生命崭新的力量和重启生命崭新的时光,重新去缔造自己生命未来的光明。。
《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:第三讲:过程Sub、函数Function、集合Collection的作用范围域          
         

第三讲  过程Sub、函数Function、集合Collection的作用范围域  

大家好,今天继续讲解VBA中类的解读及应用,今日讲解第3讲内容:过程(Sub)、函数(Function)、集合(Collection)对象的作用范围域。

1  过程(Sub)、函数(Function)也有作用范围(或者叫作用域)  

我们可以这样理解,过程和函数并无实质的区别,当需要返回值时,就使用Function,如果不需要返回任何结果,都可以,推荐你使用Sub。
在标准模块中通过使用Private和Public关键字,可以划分为模块级和全局级,以决定它是在当前的模块有效还是整个工程有效。尽可能不要在类中定义Public方式的变量。

2  在类模块中,对作用域的理解  

1) 类是对象的灵魂,是生成对象的模具,每生成一个对象,相当于产生了一个类的副本,这个副本就是对象的“肉身”,副本间是相互独立的,从而,模块级的变量只作用于副本自身。
2) 类模块中使用Public关键字,只有当引用对象变量是这个类的实例时,才能被访问。
3) 类中不能定义Public方式的结构(Type),如果必需要这么做的话,可以使用一个类来代替Type.

3  集合Collection,自定义对象范围的应用  

Collection是我们在使用类时最常用到的对象。一个Collection对象代表一组相关的项目,其实它的成员并不被强制要求是同一类型。建立集合的方法和建立其它对象一样,如:Dim mycol As New Collection集合建立。可以使用Add方法添加成员,用Remove方法删除成员,用Item方法从集合中返回特定成员。这有点类似于字典。
         
Private Sub CommandButton1_Click()
    Dim mycol As New Collection
    Dim i%
    Dim myct As Control
    For Each myct In Me.Controls
        mycol.Add myct
        MsgBox "下面添加成员" & myct.Name
    Next
    For i = mycol.Count To 1 Step -1
        If Left(mycol.Item(i).Name, 7) = "TextBox" Then
            MsgBox "下面删除成员" & mycol.Item(i).Name
            mycol.Remove i
        End If
    Next i
End Sub
代码截图:
         
代码讲解:上面的代码先将窗体上所有的控件加入到集合中,然后删除掉TEXT控件。Count属性返回集合的成员数量,Remove方法后面的参数是集合成员的索引号。成员的索引号通常是按照加入的顺序自然编号,从1开始,但可以在加入时使用Add方法的参数进行改变。
         
uAdd方法的完整语法是:
object.Add item[, key][, before][, after]
1)item 必需的。任意类型的表达式,指定要添加到集合中的成员。
2)key 可选的。唯一字符串表达式,指定可以使用的键字符串,代替位置索引来访问集合中的成员。
before/after 可选的。表达式,指定集合中的相对位置。
如下面语句向集合增加一个对象TextBox1,并定义该成员的关键字为tx1:
col.Add TextBox1, "tx1"
增加一个对象TextBox2,并把它放在成员TextBox1的前面:
col.Add TextBox2, , "tx1"
         
下面看我们今天的代码测试,运行:
         
         
今日内容回向:
1  Sub 和Function有什么不同?
2  什么是集合?
         
         
         
         
         
         
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
         
         
         
         
         
         
我20多年的VBA实践经验,全部浓缩在下面的各个教程中
         
        
【分享成果,随喜正能量】把时间用在积极,美好,安稳的事情上,愿你遇到这样的人,
愿你成为这样的人。

文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论