龙空技术网

VBA在EXCEL中的应用(二)

老财务J 120

前言:

而今你们对“隐藏模块存在编译错误thisworkbook”大概比较珍视,咱们都需要分析一些“隐藏模块存在编译错误thisworkbook”的相关知识。那么小编在网摘上网罗了一些关于“隐藏模块存在编译错误thisworkbook””的相关文章,希望看官们能喜欢,你们快快来了解一下吧!

VBA的所有功能包括各种控件的功能都是在EXCEL菜单的开发工具里面,我以EXCEL2013为例,默认的EXCEL菜单是没有显示开发工具的,所以如果当你发现EXCEL不知道在什么地方编写VBA的时候,就先看看菜单是否还没显示出来。

要显示开发工具菜单,在EXCEL的选项,然后点击自定义功能区,在右边的选项中,勾选开发工具就可以了。

先录制一个宏

开发工具的第一项就是VBA的编译器,所谓编译器简单点说就是编写代码的地方。不过我还是打算从录制宏开始说。

说起宏,那真真是EXCEL非常优秀的功能了,他可以把你所有在EXCEL的操作都记录成代码,这个用处实在是太大了。如果说EXCEL的函数是非常多,像一本书一样,那代码中所涉及的内容就是一个图书馆了,而录制宏之后,代码就呈现在你面前,你可以看着代码逐步分析,因此我觉得要说VBA的话,还是先录制一个宏来的方便。

我在这里进行一个操作,是把单元格做一些格式上的操作,然后对这些单元格进行求和。

我想录制一个宏并不难吧,你随意或者有意在EXCEL上做任何操作,最后都会被转化成代码。通过点击宏,并且选择你需要的宏点击编辑,就可以进入代码界面,也就是编译器,或者点击开发工具的VISUAL BASIC按钮,也可以打开代码编译器。

认识一下编译器

编译器就是编写VBA的地方了,不过编译器并不仅仅是一个记录的地方,他不是记事本,大家也看到了,编译器里面还有很多功能的。当然这么多功能也不是都要学的,或者说这里面只需要先学一些重要的功能,其他的有时间再去了解就可以了。

先来看一下整个编译器的左边部分

这是一个树状的结构,稍微看一下,大家就明白了吧。第一级别是整个VBA工程,然后就是EXCEL对象和模块两部分了。EXCEL对象罗列了整个EXCEL文件中的所有SHEET以及这个EXCEL,当你双击比如SHEET1的时候,就会跳出一个代码编译框,看这个标题就是针对SHEET1的,而当你双击THISWORKBOOK也通用的会跳出一个代码编译框,而标题自然就是THISWORKBOOK。这么说大家应该就明白了,但凡在这个EXCEL中存在的SHEET包括他自身都有自己对应的代码编辑区域,这么做一方面是为了代码更易于管理,另一方面,代码本身也有自己的作用范围的。换句话说SHEET1的代码是不会应用在SHEET2的,互相之间不影响。

模块是啥呢,一时间我也无法用专业的语言来解释他,不过上面说过代码是有作用范围的,有些范围是被限定在某一个地方,但还有些时候需要代码可以运行在所有范围内,毕竟如果每个代码都是各自运行在各自区域的话,有些功能难道要重复编写吗?所以模块就是可以运行在所有范围的代码都集中的地方,我刚才录制的第一个宏,就被放置在模块中了。模块是可以无限添加的,名字也是可以改的,这样就方便管理自己的代码,比如将一堆功能类型一样地放在一起。

程序的开始和结束

我们来研究一下刚才录制的宏1的代码。

代码就是代码,可能刚开始学的人会看着头痛,静下心来。这段宏代码开头就是

Sub 宏1()

好,宏1就是这一段代码的名称了,SUB他的英语意思大致就是过程。然后结束段大家也能看到,是End Sub,这就很好理解了吧,至于中间的我们暂时先不去理会。

凡是VBA中的代码,必然就是这么个结构,开头定义好名称,结束通过END来标记这段代码结束了。

而开头的括号里面是填写这段代码所需要的参数,当然这个宏1是没有参数的,所以就没有任何内容了。

程序最好都是英文的,包括名字,所以像宏1这个名字虽然不影响他的工作,但是全部用英文即便是拼音也是一个很好的习惯。我们就把宏1改成MACRO1,然后当我们点击开发工具宏的时候,EXCEL已经自动罗列出了MARCRO1的宏。

Sub和Function

这两个如果从单词的意义去理解,差不多就是一个是过程,一个是功能。而这两个东西差不多就是接下去VBA要接触的很大一部分内容了,其他内容比较好理解,也比较简单。

过程和功能的区别在于,过程不返回任何值他只是让电脑做事情,而功能不光是让电脑干活,而是必须返回值的。比如你今天早上起床以后洗漱、吃早饭、开车去上班、上完班开车回家、吃晚饭、洗漱睡觉,这个就叫过程,因为没得到什么结果;而在你上班的时候你吩咐你的手下准备资料,下午2点前要有结果,结果你的手下提前完成了给了你要的东西,那么这个就是功能因为你得到了一个结果。

结合之前录制的宏1来说,他的内容就是把单元格进行了一顿操作,但没有返回任何结果,所以他就是sub。而EXCEL中的函数,无论用什么函数,你给他必要的参数之后,他必定能给出一个结果,那他就是function了。

那么我们现在可以手动写一个function了,当然只写一个开头和结束,其内容就是

Function myfunction()

End Function

就把这开头和结束写在宏1后面。如果你一步步来写,当你写完开头Function myfunction(),编译器会自动补全结束语,即End Function,这个就是编译器的好处,他会自动感应很多内容。

好了,写完这么简单的两句,然后我们在EXCEL随意的单元格内输入公式=myfunction,对,是不是还没输完,EXCEL就知道有这么一个函数了吧。虽然他没有实质性的内容,不过这里面的意思大家应该理解了吧

对于sub和function,老实说我也不知道该怎么称呼他,就像function你可以叫他功能也可以叫他函数还可以叫他公式,对吧。所以我还是强调一点用他们之间的区别来进行解释,这样可能好理解一点,一个不返回结果,一个则必须返回结果。这两货应当说所有的编程语言都是有,而且都是主要内容,只不过其他语言不叫sub和function了,他们的作用其实都是一样的。

那么sub用在什么地方呢,我们录制了的宏,在宏菜单中可以选择进行执行。他还可以用在其他控件中。比如你在EXCEL中拉出一个按钮,系统马上会弹出宏的列表,然后你就可以选择刚才录制的宏,意思就是当你按下这个按钮,他就会执行那段宏的代码了。

当然控件不仅仅只有按钮,还有很多,比如文本框,比如下拉框,但凡这些控件所涉及的代码,那基本上就是sub了。

标签: #隐藏模块存在编译错误thisworkbook