作为一只财务狗(没错,就是我),和Excel打交道简直是一件再正常不过的事情了。你每天无数次的和Excel打交道,每个月也许还无数次的从各种系统中导出各种的表再做基本分豪无差的手工加工。同时你也许还在怀疑人生。说好的高大上的可以对过往财务数据分析来给公司战略一些input,可是每天机械的出报表关账已经占据了八小时(甚至还多)的时间,哪有闲工夫去做分析?
也许你不是一只和我一样的财务狗,而是一个高大上的HR。在每个月底算工资算五险一金算奖金的时候,是不是也在碎碎念为啥每个月都要做这种无聊的毫无技术含量的活?
除此之外,收集CASE的时候我还看到了办公室部门,生产计划部门等等各种工作岗位的小伙伴们对重复无趣劳动的申诉。
其实,几乎所有的,有逻辑的重复性的做表工作,是可以通过码代码(VBA)来实现自动化的。VBA还可以实现跨软件的操作,比如给每个客户自动发送对账单,把excel的内容填写到每个单独的word文档,等等等等。
我会慢慢写一点VBA方面的小文章,但是这不是一个系统的教程,只是希望你能发现提高工作效率的方法,尽快上手写出一点小小的程序。
一 在哪码代码?
常用的办法有两个:
通过菜单栏的开发工具 - Visual Basic进入
也许你在你的Excel菜单栏会找不到开发工具这个东东,那是因为你从来没有用过。在文件-选项-自定义功能区中可以把开发工具调出来哟
2. 方法2就更加简单粗暴了,ALT+F11快捷键直接进入。
进入之后,界面大概是这个样子的。
在你需要码代码的那张表上,单击右键,选择插入-模块,就会出现能让你码代码的窗口了。
通常来说,我建议大家先更改模块名字为英文名字,有的电脑因为系统语音的问题,中文名字的模块可能出现开文件报错全部代码丢失的问题。辛辛苦苦码了好一阵子的代码丢了会让人抓狂的。
另外,非常重要的一点,要把有代码的文件,保存成xlsm格式的文件,xlsx的文件是不支持VBA的。
小总结
ALT+F11和开发工具下的Visual Basic都可以进入编辑器,在表格下新建个模块开始码起来吧。文件要存成xlsm格式!!
二 对象 - 对象是什么?
别想歪,此对象非彼对象,而是指你在程序中需要控制和操作的东西,它可能是某个表,某个单元格等等。对象和对象之间的关系,可能像俄罗斯套娃一样:
Application:代表了EXCEL程序
Workbooks:工作薄
Worksheets:工作表
Range:工作表中的某些单元格
这种一层套一层的对象,中间用.来连接,从高的连接到低的,比如:
Applicaiton.Workbooks("KeepLearn").Worksheets("Sheet1").Range("A1")
那么指的就是KeepLearn这个工作簿中Sheet1的工作表的A1单元格。是不是很简单?
当然我们并不是每次想指A1都需要从excel的程序application写起,系统会默认你是在目前活动的工作簿/工作表中选取,所以如果活动的工作表就是Sheet1,你可以直接写Range(“A1“)
三 对象 - 对象的属性和方法
对一个对象来说,它既有属性又有方法。我们还是来做个简单的类比吧,这次把对象就看成你家里的那个对象
- 属性是你对象的内容或特点,比如你对象的名字,你对象的肤色,你对象的衣服,等等等等。
- 方法则是你对对象的某个操作,比如你给你的对象穿了件新衣服,你亲吻了你的对象,或者你换了个对象,咳咳,等等。
对应到Excel中,那么:
- 对象的属性可能是工作表的名字,某个单元格的字体,字号,颜色
- 对象的方法则可以是打开工作表、复制某个单元格、激活了一个新的对象
小总结
对象就是你控制和操作的东西,可以是工作簿,工作表,单元格等等。对象有属性也有方法,要区分开哦。
四 小例子
其实除了对象还有很多很多的基础知识,是学任何自然语言或机器语言都避不开的,但是为了让看的人不被无数的语法淹死,也更符合我让你们尽快上手写出点东西,甚至不问原因只求结果的目的,我们小例子需要啥,那么上面就只说什么语法。
今天我们的例子很简单,我们全部都只对工作簿这个对象进行操作,我们需要新建三个工作簿,保存这三个工作簿在桌面上,保存的时候分别命名为:上海,北京,深圳。
9行代码就可以达到这个目的啦,而且大家可以看出来其中其实3行基本一样的代码重复了三次。我们归纳一下对工作簿的动作其实就以下几种:
新建工作簿
Workbooks.Add
打开工作簿
Workbooks.Open "路径"
例如:Workbooks.open "F:\KeepLearn.xlsm“
激活工作簿
Workbooks("工作簿名").Activate
例如:Workbooks("上海").Activate
同一个时间,活动的工作簿只能有一个,如果你需要激活另外一个工作簿,那么原先的工作簿就自动处于非活动的状态了。有些EXCEL的操作也会自动切换活动工作簿,例如上面代码中的新建工作簿,新建出来的工作簿自动成为当下的活动工作簿。
这点新手码代码时候一定要特别注意,因为如果你只写了Range("A1"),那么程序会自动认为是活动单元表的A1单元格。这种情况下,哪个工作表是活动的就很重要了。
保存工作簿
Workbooks("工作簿名").Save
如果需要保存为新的文件,或者是第一次保存一个新建的工作簿,用的是saveas
Workbooks("工作簿名").Saveas "路径及文件名“
关闭工作簿
关闭所有打开的工作簿:
Workbooks.Close
关闭指定的工作簿并保存:
Workbooks("工作簿名").Close True
关闭指定的工作簿并不保存:
Workbooks("工作簿名").Close False
小提示
VBA可以对工作簿这个对象进行新建、打开、保存、关闭等各种动作。
五 总结
这真是一篇不伦不类的教材或者分享,如果你还能看到这里,非常感谢。
我自己边写边感觉这个也该说说,那个也该说说,但又担心一股脑把概念都丢出来,所有人都飞快丧失兴趣了。慢慢写,慢慢平衡吧。有意见欢迎提出来。