VBA,全称Visual Basic for Applications,其中的一些专业性的解释可以自行搜索,这里就不一一介绍。半年以前,我是不知道VBA的,当我听到VBA的时候,我却迷糊了。VBA是什么?和我学过的VB(当然,那个时候C语言都不会,何况是VB,基本不会.)有什么区别吗?难道又是一门很难的语言,功能很强大?
总总问题在我脑海,然后,我把它抛开了,没有去管他。是的,没有看错,我没有去管他。
大概进过了半年左右的时间,也就是一个月前,当我还沉浸在粘贴复制,粘贴复制,无休止的操作中的时候,偶尔看到了一个令我惊讶的事情。打开一个文件,他会统计所有相关联的文件,然后把信息汇总,然后生成报告,然后,留下我吃惊的在那里。是那个时候,我突然意识到,VBA对于文档类还是非常重要的。(当然,目前我只了解这么点。)
所以,从那后,我就开始学习VBA了。说是学习,其实也就花了几天时间看了一下书而已。
以下是我关于VBA的一些基础性的总结,当然总结的层面仅限于我这个层次的水平,几天时间的看书而已,期间也弄了一些恶作剧的excel文件。好了,废话不多说了,开始了。
一个链接:可以进去看一下。http://blog.163.com/xing_aixin/blog/static/37235505200837129771/
1.变量
学过C语言的知道有如下的几种类型:int,float,double,char,long,short等,既然是程序语言,先从变量类型开始。
VBA的变量类型有:
汉语名 | 标识名 |
字符串型 | String |
字节型 | Byte |
布尔型 | Boolean |
整数型 | Integer |
长整数型 | Long |
单精度型 | Single |
双精度型 | Double |
日期型 | Date |
货币型 | Currency |
小数点型 | Decimal |
变体型 | Variant |
可变对象型 | Object |
当然还有一个用户自定义的。
有兴趣的可以查看每种类型的适配用途,对应到用Excel哪里可以看到这些东西的影子,可以对着一个单元格,反剑一下,查看单元格属性,是不是看到有一些东西很熟悉?是的,你没有看错。当一个单元格数字的类型不同的时候,呈现的东西有可能是不同的,比如说,2015-03-29你将单元格属性设置为数字和设置为日期,在显示效果上会完全不同:一个是日期,一个是数字。那么那个数字有没有什么规则呢?小弟不才,看了半天都没看出个什么门道出来,只知道日期变大或变小会加一或减一,后来百度了才发现原来是和1900-01-00的天数(…………)
当然,这里简单的说一下其中的区别。其中很多都和C语言中有很多相识的地方。当整数比较小时用byte,大的时候用integer,很大的时候就用long。(vba会自己变更大小写,当然只适用于这种关键字。。)一个数字已经上亿了,你说它大不大。一个班级的人数显然不会很大。一串英文那就是string了。
号了,多的不扩展了,不会像一个int是4字节,一个byte是一字节那样,不懂可以去查。然后自己code体验一下。
2.变量的声明
很多语言同C一样,都是类型在前,变量名在后,就像这样
限定符 VarType VarName = VarValue; //包括了初始化。
在VBA中,变量的声明:
限定符 Dim VarName As VarType = VarValue ’Dim 变量名 as(是) 什么类型。
其中限定符什么的,无非就是,这个变量表示的权利大小,美国的到哪里都可以,朝鲜的估计只有朝鲜的能够管管用了。
当然,varType不止上面的那些东西,还有可以是好多东西。先暂时这样理解吧,(如果有面向对象的思想的话可以把那看作一个类,把变量看做一个对象。想想,确实可以这样理解,不是的么?)
当然,其中也有一些简单的写法。小明是男人,也可以这样表示:小明,男(其中的一些符号%,$这些就不说了,有兴趣自己去了解)。表示方式不同,但解析的意思是一样,只要我们明白其中的含义就可以。
3.过程和函数
在VBA中,有sub过程和function函数。两者有什么区别么?我想应该是有的吧。
过程,故名思意就是一个过程,具体是什么过程需要看具体的实现了。据说C语言就是过程式的。
函数,同样的,从小到大不知道被多少函数折磨着,什么三角函数啊啥的,共同点有:有返回值,当然有参数。(当然,对比C语言的函数就不同了,话说C语言函数也是有返回值的。)
一般,学习语言以前都会有很经典的一个hello world。用一个sub过程来蹦出一个hello world出来。
代码如下:
Sub vba_test() Msgbox "hello world" & chr(13) _ & "你好,世界!" End Sub
解释一下上面的各个东西:
msgbox : 类似于printf,什么printf不知道,好吧,你可以把它理解为一个话筒。我们听到的一个人话筒的声音是那个发音者的声音么?显然不是。发音者告诉话筒,我说什么,你就给我重复说什么。好吧。这只是一个呈现的方式。当然,也可以选择你说什么就打印出是没出来,siri就是这样的。(到后面你会发现msgbox远远不止这点东西。)
作用,在屏幕上蹦出一个弹出框,对,就是你点广告一直会弹出来的那种东西。想了解点广告弹出,可以去了解html,javascript。
“”两个引号包括的,字符串。
chr(13) :换行 和\n什么的……
_ : 有时候是不是发觉一行写不完一个东西?好,txt也许不存在这个问题。当然,在C语言里面也有这种东西存在。 在C语言中是用的 \
//在宏定义的时候时候 //如果是一下的方式定义的 #define TEST1 #define TEST2 #ifndef TEST1 #define VBATEST(x) do{ x= x^2 }while(0) #endif //看着不爽?,你也可以这样写 #ifndef TEST2 #define VBATEST(x) do{ x = x^2; }while(0)#endif //有行数就是任性!!! //当然,你说可以这样写我也不怪你。#ifdef TEST2#define VBATEST(x) do{ x = x^2; }while(0)#endif
这个VBA中的 _ 和 这个 \ 是一样一样的。
【2015-03-31】