VBA小白入门之:类模块

一、大致解释一下什么是类、对象

有一些计算机常识的,都应该知道什么叫类(Class)或者对象(Object)。一个对象,可以有属性、方法。举个白痴但是通俗的例子:人作为一种对象,有上着、下着这两个可读可写的属性,以及穿着好看不好看这个只读的属性,还有走路、跑步这两种方法。属性返回的是一个值,方法返回值不能表达的东西。

再举一个Excel里的例子:A1单元格,有字体、字号、边框样式……这些可读可写的属性,还有所在位置、所属Sheet、……这些只读的属性,还有清除其中内容、将其中的字母全变大字、……这些方法

类有一个特点,凡是同属于这个类的对象,其属性、方法的类目(如上面说的字号、边框样式,而不是说14号字、粗边框这种具体的)都是相同的。也就是说,定义好了一个类,赋与不同的属性,就能搞出许多对象。

比如,造出一个叫“地名”的类,令其属性“地图”为陕西的行政区划,则问它“灞桥”,它就能返回“陕西省-西安市-灞桥区”。创建若干个同属地名这个类的对象,扔进去不同省的,问它地名,它就能告诉你相应省内地区的行政归属。

总地来说,这东西和函数稍有类似,能够按照既定的模式,在给定的参数下,做出不同却相似的效果。

二、VBA的类模式怎么玩

1 创建一个类

打开Excel中的开发工具-查看代码

如图新建一个类:

给这个类起个名字:

赋予它属性,定义好内部存储这些属性的变量:

赋予它属性,告诉VBA怎么写入(Let)、读取(Get)属性(Property)。注意,如果正在写入的这个属性和其他属性是关联的,则在这时即可对这个关联的属性赋值,如图中的“受到未成年保护”这个属性:

如果所赋值不是变量,而是对象,则需要改用Set替代Let

这里需要注意,属性在赋值时指定(Let)成了什么数据类型(Property Let 年龄(x as Integer)中的Integer),在获取(Get)该属性的代码(Property Get 年龄() As Integer)中,应该令返回值为这种数据类型(As Integer)。

告诉它怎么“动”(即赋与一种方法),比如弹出窗口(MsgBox)来介绍自己:

提示:如果想让方法有返回值,则将本段代码第一行的Sub换成Function

Private Gender As String, Age As Integer, Protected As Boolean

Property Let 性别(x As String)
    Gender = Left(x, 1)
End Property

Property Get 性别() As String
    性别 = Gender
End Property

Property Let 年龄(x As Integer)
    
    
    If x >= 18 Then
        Protected = False
    Else
        Protected = True
    End If
    
    
    Age = CInt(Round(CSng(x), 0))
    
End Property

Property Get 年龄() As Integer
    年龄 = Age
End Property


Property Get 受到未成年保护()
    If Protected Then
        受到未成年保护 = "是"
    Else
        受到未成年保护 = "否"
    End If
End Property

Sub 自我介绍()
    
    If Protected = True Then
        tmp1 = ",受到未成年人法的保护"
    Else
        tmp1 = ",不受未成年人法的保护"
    End If
    
    MsgBox Gender & "性,年" & Age & tmp1

End Sub

2 新建并使用这个类下的对象

插入模块:

在一个过程(Sub)中创建3个这个类的对象,Alice、Bob、哪吒:

赋予三个“人”以性别、年龄:

弹出框里那个黄的表示方法,白灰蓝那个表示属性
Sub 演示()
Dim Alice As New 人
Dim Bob As New 人
Dim 哪吒 As New 人


    Alice.年龄 = 26
    Alice.性别 = "女"
    
    Bob.年龄 = 21
    Bob.性别 = "男"
    
    哪吒.年龄 = 16
    哪吒.性别 = "男"
    
    
    Alice.自我介绍
    Bob.自我介绍
    哪吒.自我介绍
    
End Sub

点击运行试试看:

就会依次弹出:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348