听说没有对象放假不好回家?那就聊聊啥是对象~
我举个例子,假设你有个女朋友。你这女朋友有什么特征?没有特征?没有特征岂不是人人都成了你女朋友?咦,这样想想好像也——醒醒,醒醒,小同志!天都亮了~
打个响指,我换个比方。假设你小时候有一本特别漂亮的日记本,有一天不小心弄丢了,你很伤心,怎么办呢?当然是去找老师啦。
你先去找语文老师。
'老师,我的日记本丢了,呜呜呜。'
'小胖啊别哭,你的日记本有什么特征啊?'
'我有在扉页上写我的名字。'
'哦,知道了。日记本.名字是小胖'
……
然后你又去找数学老师。
'老师,我的日记本丢了,呜呜呜。'
'小胖啊别哭,你的日记本有什么特征啊?'
'它是黄色的,很黄很黄。'
'哦,知道了。日记本.颜色很黄'
然后你又去找生活老师。
'老师,我的笔记本丢了,呜呜呜。'
'小胖啊别哭,你的日记本有什么特征啊?'
'……里……里面有我给小柔写的情书,我……我背给你听啊……'
'哦,知道了。日记本.内容是'小柔啊太阳,我啊星星,没有她的日子再璀璨也是黑夜啊啊啊'。'
你小时候的日记本是一个物体,是对象;名字、颜色、内容、大小……这些都是日记本的特征,也就是对象的特征。只不过在编程世界中我们不用特征这个词,而是用属性,因此对象的属性也就是对象的特征。
我举个例子。第二天下午,体育老师帮你把日记本找到了,原来是你偷看小柔打乒乓球时落在操场上了。
拿到日记本后,你得赶紧打开看看有没有损坏。打开是一种行为,在编程的世界代码是这么描述的:日记本.打开
最后你心满意足把日记本关上,关上还是一种行为:日记本.关闭
你有一个对象,是日记本,这个日记本会有各种行为,比如打开、关闭、写入;这些行为在编程的世界中被称为方法,因此方法就是行为。
是不是很简单?
你的日记本是一个个体,我的日记本是一个个体,她的日记本也是一个个人……所有人的日记本合在一起也就组成了一个群体,这就是对象的集合。所以所谓对象的集合,就是多个相同类型小对象的集合而成的大对象。
当你对老师请求帮助时,你会说,我的日记本丢了,而不是日记本丢了。说日记本丢了会怎么样?在现实世界中,老师可能会确认一下谁的日记本丢了,而在虚拟世界中,系统会认为所有的日记本都丢了。你会想这不现实,怎么可能所有的日记本都丢了,傻子才会这么想——那么你还记得咱们讲过的程序员买包子的段子吗?
打个响指,下面是见……进入虚拟编程世界的时刻。
如下图所示,一个名为'我学VBA'的工作簿包含了三张工作表。
在VBA中,工作表使用单词Worksheet表示;所有的工作表,也就是工作表的集合,用复数形式Worksheets表示;我们要删除的不是所有的工作表,而是工作表集合中一个名称为'星光'的,也就是Worksheets('星光')
删除是一个行为,是方法,还记得方法怎么表示吗?代码如下:
Worksheets('星光').Delete
Sub 删除工作表()
Worksheets('星光').Delete
End Sub
假设你想代码告诉你当前工作表的A1单元格的内容,内容是特征,也就是属性。A1单元格我们可以用Range('A1')表示,它的属性内容呢?
Range('a1').Value
是不是很简单?不要怀疑,VBA就是这么简单~
同样的道理,Excel程序是第一层对象,某个工作簿是第二层对象,这个工作簿内的工作表是第三层对象,工作表里的单元格是第四层对象……
了解对象的层次有什么用?
如果你女朋友对你说,给我把第三行的字删掉,立刻!马上!赶快!!——你知道她在说什么吗?哪里的第3行字?是黑板?是考卷?还是日记本?如果是日记本的话,是第几页的第三行?——摊手,耸肩,你知道我知道你不知道。
但也有一种特殊的情况;比如,你和她坐在草坪上一起看小时候的日记,她对你说,给我把第三行的字删掉,立刻!马上!赶快!!这个时候不用她说是哪里的第三行字,你都知道是当前日记本当前页的第三行字——这就是对象层次的默认性。
举个VBA编程中的例子。
你还记得如何删除名称为'星光'的工作表吗?
Sub 删除工作表()
Worksheets('星光').Delete
End Sub
同时我们没有指定工作簿,系统就默认为当前活动工作簿,因此这段代码删除的是Excel程序内当前工作簿内名字为'星光'的工作表。
再看另外一个例子,以下代码可以使用消息框的形式显示A1单元格的内容。
Sub 单元格的内容() '当前工作表
MsgBox Range('a1').Value
End Sub
那如果你需要知道的不是当前工作表的A1单元格的内容,而是当前工作簿~名称为'朕要学习'的工作表~A1单元格呢?
不同层次之间的对象,我们可以用点号.来表示。同属性和方法一样,这里的点号可以理解为中文意思的。
代码如下:
Sub 指定单元格的内容()
MsgBox Worksheets('朕要学习').Range('a1').Value
End Sub