从0到1开启VBA之旅——Excel系列分享05

最近参加朋友的线上读书会,在技能分享环节做了一个VBA入门分享,因为自己对编程一直有些兴趣,再加上这是一个人人都需要懂点编程思维的时代,我想即使自己略懂皮毛,仍然可以做一点输出,站在门口欢迎外面的人进来参观一下也好。

学VBA大概是门槛最低的学编程的途径,因为人人电脑里都有OFFICE软件,都有EXCEL,它自带编程环境,这不工具就齐了,就等你码代码了。

说到写代码可能大家会觉得犹豫,什么也不懂就能写吗?这个问题先放一放,我们先走着。

首先简单介绍一个学习方法论,叫做拼图理论,我们传统的学习模式叫做登山理论,当我们学习一项新技能的时候,登山理论告诉我们要先把基础打扎实,什么也不做先扎马步,扎个一年半载,而拼图理论说的是我们可以先把整幅图的边框拼出来,然后再往中间填东西。我想对于编程的普通学习爱好者来说,入门更适合用拼图理论,否则很容易倒在还没摸到门儿的路上。即使对细枝末节不甚理解,先做出东西来,获得成就感和学习动力,才能不断地往前走下去。

所以我就挑了一幅简单而有趣的「拼图」,带领大家一起做了一个小程序,完成从0到1的跨越。

这个小程序叫做「午饭吃什么」,需求来自于我的一个好朋友,她说她有选择困难症,每天到了午餐的时候就犯难,他们单位附近饭馆特别多,想要有一个小程序来帮她做选择,于是我就用了10行代码,帮她解决了这个问题。

准备工作

1、启用「开发工具」菜单
Excel默认状态下没有「开发工具」菜单,所以如果你之前没有在Excel里写过代码,那么大概率你在上方菜单还看不到「开发工具」这项,所以第一步先要启用它:点击「文件」--「选项」--「自定义功能区」,勾选「开发工具」。

启用「开发工具」菜单

然后你就会看到菜单栏中冒出来一个「开发工具」菜单。

2、保存为*.xlsm文件
Excel默认新建的是*.xlsx格式的文件,如果想要在自带的VBA开发环境中编辑代码、执行代码,就要保存为启用宏的工作簿,即在保存的时候,下拉框中选择后缀名为「xlsm」的文件类型。
3、熟悉开发环境
在「开发工具」菜单下点击「Visual Basic」按钮就可以进入开发环境:

vba编程环境

简单了解一下就好,左边工程窗口可以看到工作簿和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编程之旅。

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

推荐阅读更多精彩内容