最近参加朋友的线上读书会,在技能分享环节做了一个VBA入门分享,因为自己对编程一直有些兴趣,再加上这是一个人人都需要懂点编程思维的时代,我想即使自己略懂皮毛,仍然可以做一点输出,站在门口欢迎外面的人进来参观一下也好。
学VBA大概是门槛最低的学编程的途径,因为人人电脑里都有OFFICE软件,都有EXCEL,它自带编程环境,这不工具就齐了,就等你码代码了。
说到写代码可能大家会觉得犹豫,什么也不懂就能写吗?这个问题先放一放,我们先走着。
首先简单介绍一个学习方法论,叫做拼图理论,我们传统的学习模式叫做登山理论,当我们学习一项新技能的时候,登山理论告诉我们要先把基础打扎实,什么也不做先扎马步,扎个一年半载,而拼图理论说的是我们可以先把整幅图的边框拼出来,然后再往中间填东西。我想对于编程的普通学习爱好者来说,入门更适合用拼图理论,否则很容易倒在还没摸到门儿的路上。即使对细枝末节不甚理解,先做出东西来,获得成就感和学习动力,才能不断地往前走下去。
所以我就挑了一幅简单而有趣的「拼图」,带领大家一起做了一个小程序,完成从0到1的跨越。
这个小程序叫做「午饭吃什么」,需求来自于我的一个好朋友,她说她有选择困难症,每天到了午餐的时候就犯难,他们单位附近饭馆特别多,想要有一个小程序来帮她做选择,于是我就用了10行代码,帮她解决了这个问题。
准备工作
1、启用「开发工具」菜单
Excel默认状态下没有「开发工具」菜单,所以如果你之前没有在Excel里写过代码,那么大概率你在上方菜单还看不到「开发工具」这项,所以第一步先要启用它:点击「文件」--「选项」--「自定义功能区」,勾选「开发工具」。
然后你就会看到菜单栏中冒出来一个「开发工具」菜单。
2、保存为*.xlsm文件
Excel默认新建的是*.xlsx格式的文件,如果想要在自带的VBA开发环境中编辑代码、执行代码,就要保存为启用宏的工作簿,即在保存的时候,下拉框中选择后缀名为「xlsm」的文件类型。
3、熟悉开发环境
在「开发工具」菜单下点击「Visual Basic」按钮就可以进入开发环境:
简单了解一下就好,左边工程窗口可以看到工作簿和sheet对象,可以双击选择,决定代码写在哪个对象之下。右边一大片就是我们码代码的区域。
认识基础语法
1、声明变量
语法是:Dim...As...
相当于是做一个自我介绍,让大家知道你的存在,知道你是一个什么物种。例如:「Dim rNum as Integer」,rNum为变量名,Integer代表变量类型为整数型,也就是说,我现在要声明一个叫做rNum的整数型变量,后面的代码就可以对它进行引用或其他操作。
2、单元格引用
单元格作为一个对象,程序在引用的时候这样写:Cells(x, y),x和y均为数字,x代表单元格所在行号,y代表单元格所在列号,相当于是单元格的坐标。
3、获取行数
这也是编程中的一个高频操作,本例中我们需要程序自动获取餐馆的数量,可以通过获取Sheet2中数据占据的最大行数来得到,语法是:Cells(Rows.Count, y).End(xlUp).Row,此处只需要将「y」替换成当前所在列的列号即可。
4、If判断语句
If判断语句是任何编程语言都会高频使用的句式,在VBA中的语法为:If…Then...Else…EndIf,可直接按照字面意思来理解,即「如果满足...的条件,就执行...,如果不满足的话就执行...结束」。本例中就是用于判断,万一随机选择到吃「土」的话,界面上显示的文字不同。
开写代码
首先我们画一个「开关」,就是一个按钮,目的是按下这个按钮,让Excel开始执行我们接下去要写的代码。方法是:点击「开发工具」--「插入」--「Active X控件」的第一个,然后按住鼠标随便画。
画完之后双击这个按钮,会直接跳转到前面看过的VBA编辑窗口,就可以开写代码啦。
基于我们的需求,我事先把餐馆清单放在了Sheet2中:
我的目的是在Sheet1中按下命令按钮之后,界面上立即显示在Sheet2清单中随机选择的餐馆,效果如图:
(可以看到「吃土」的时候文字显示不一样~~^^)
下面放出代码,就10行,单引号开头的是注释(写注释是为了理清思路,便于理解和阅读代码,也是程序员必须养成的好习惯):
Private Sub CommandButton1_Click()
'声明变量
Dim rNum As Integer
Dim rSelect As Integer
'获取餐馆数量
rNum = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row - 1
'随机选择
Randomize '初始化随机数生成器
rSelect = Int(Rnd() * rNum) + 1 'Rnd()函数是一个大于0小于1的任意随机小数,Int()是一个舍去小数部分的取整函数
If rSelect = 20 Then
Cells(4, 4).Value = "吃" & Sheet2.Cells(rSelect + 1, 2) & "55555(T_T)"
Else
Cells(4, 4).Value = "吃" & Sheet2.Cells(rSelect + 1, 2) & "吧!"
End If
End Sub
另外注意,在按下按钮执行代码之前,先确保「开发工具」菜单栏下的「设计模式」按钮为非选中状态,否则程序不会执行,如图:
以上这10行代码里可能最难的部分是生成随机数的那个地方,但这不重要,属于数学计算范畴,只要能明白整体的代码思路就好。请务必打开电脑,按照步骤动手操作一遍,把这幅「图」先拼出来,找到前面那个问题的答案,从0到1开启你的VBA编程之旅。