经过上次文章介绍
郑天玑:如何学习Excel VBA?zhuanlan.zhihu.com本文将开启我们正式的Excel VBA之旅,本文的终点将放在VBA语言本身,我们将编写一个最基本的List链表数据结构类型,带大家学习一边VBA语言的基本特性。
1 何谓链表List
大致图示如下:
- 1 List有点类似数组,可以将一个个数据串联在一起,进行顺序访问,每个数据被包裹在一个名为node的对象中,node也成了List的基本组成单元。
- 2 node对象由两个基本元素组成,一个是data,用来存放数据,另一个是nextnode指针用来存放下一个node的地址,这样一来我们获取List中的第一个node之后就可以顺藤摸瓜式地按顺序访问挂载在整条List中的所有node中的数据。(链表最后一个node,它的nextnode=nothing)
- 3 List链表本身包含一个head指针指向链表头,一个tail指针指向链表尾,一个isize变量记录链表的长度
程序要实现的功能如下:
Sub test()
Dim mList As New MSList '定义并创建一个链表对象
'调用链表对象的Append函数往里面添加数据,这个数据会由一个node对象包裹
'我们这里会往list中添加整型、浮点型、字符串、日期四种不同类型的数据类型
mList.Append (3)
mList.Append (9999.77)
mList.Append ("租鸡青一")
mList.Append (#1/1/2020#)
mList.PrintList '将整个链表中的数据打印出来
End Sub
输出结果如下:
2 从零开始的List编写生活
明确了我们的目标,就可以从0开始构建我们的程序了,万里执行始于足下,首先我们新建一张Excel表格,取个名字,然后双击打开,点击到:开发工具-Visual Basic,我们就会进入开发页面
(PS:如果你打开Excel后发现没有开发工具选项卡:请点击文件-选项-自定义功能区-在主选项卡页上,勾选开发工具选项卡
然后在信任中心启用宏:
)
然后我们在右侧的工程栏目中,右键我们的自己的工程,选择插入一个类模块和一个模块:
我们会在类模块里面封装Node和List的基本功能,然后在模块中使用它们
大致是这个样子:
然后我们要把MSList和Node两个类模块的可见性改为:2-PublicNotCreatable
,以便我们未来给其他程序调用
ok,万事俱备,但我们不先急于编写Node和List,我们先打开modTtest,创建一个sub test()的过程函数,来编写我们的第一条代码(以后我们的程序会在这个过程函数中运行)
' 英文符号'开头代表此行为注释,在VBA代码编辑器中显示绿色