这篇文章我并不打算和大家分享技术相关的内容,只是想和大家分享一下我最近学习VBA的感悟。下面就以下几点分别的提出,也可以做为打算学习VBA的同学的一点参考。
什么是VBA?
首先这是第一点,什么是VBA?
Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。
VBA是基于 Visual basic发展而来的,与VB具有相似的语言结构。从语言结构上讲,VBA是VB的一个子集,它们的语法结构是一样的。两者的开发环境也几乎相同。但是,VB是独立的开发工具,它不需要依附于任何其他应用程序,它有自己完全独立的工作环境和编译、链接系统。VBA却没有自己独立的工作环境,它必须依附于某一个主应用程序,VBA专门用于Office的各应用程序中,如Word、 Excel、 Access等。在 Access中,可以通过VBA编写模块来满足特定的需要。
正是由于VBA与主应用程序的这种关系,使得它与主程序之间的通信变得简单而高效。它与 AutoCAD完全共享内存空间,所以执行速度比用C语言开发的ADS应用程序要快很多。
VBA提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。它的编写是以子过程和函数为单位,在 Access中以模块形式出现。
Office取得巨大成功的一个重要原因就是VBA,使用VBA可以完成很多事情,基于Excel、Word的VBA小程序不计其数。Office中的应用程序可以共享VBA语言,如果掌握了在 Excel 2016中使用VBA的方法,那么在Word、Power Point中使用VBA自然会变得易如反掌。掌握对VBA语言的使用,可以让复杂的工作简易化,减少不必要的重复性工作,大大提高我们的工作效率。
VBA程序员很多是业余程序员,正因为业余,解决的却是工作中需要解决的问题;所以,VBA程序大多都是只是在部门内部或个人使用的小工具。集成了VBA的其他应用程序也很多,但真正能为程序增色的不多。
大多数人看到了VBA可以自动化一个程序,可以扩展已有程序,但没有看到在Office中,VBA代码可以是录制的,而不是写出来的,带来的好处是,学习曲线变得非常缓。如果没有宏录制功能,要熟悉某个Office组件的对象模型,绝非一日之功。
----以上内容摘抄自百度
其实什么是VBA,可以这样理解,VBA相关于OFFICE系列的一个外挂脚本,它可非常灵活的为你实现特别多你想实现的功能,但是office本身并没有实现的功能,相当于定制化开发。
如果你有其他语言的学习基础,会发现其实VBA并不难。有的人可能会说,我学了好长时间,但是真的学不明白。学习这个东西,最好的是静下心来,看一周或两周,再来评论他难或不难。所以,请静下心为学习,会发现,他真不难。
咱们这里可以举几个例子,比如VBA中有自定义类型,但是却没有像C语言那样多级指针无限制调用或高超的内存操作技巧。当然,也不排除有一些高手可以实现这些功能,但是我认为最起码VBA不需要直接像C语言那样操作系统内存。另外,再举一个例子,大家都说python是一门非常简单易学的语言,但是在Python中有装饰器这个概念,在VBA中却没有这个概念,还有一些,像lamba表达式,在VBA中也没有。之前我曾试图在VBA中寻找contunue语言,后来在和群友的交流中,发现VBA并没有Continue语句,由此,我才得出这个结论,如果你学习过其他语言,会发现VBA确实是一门简单的语言。
然后是第二点,那么在VBA学习的过程中,真正的难难点是什么?
学习VBA 的真正难点是VBA中的各个对像的用法,它的用各种对象种类丰繁复杂,并且功能也极其强大。注意我的用词是极其强大,它的各种对像可以实现你想实现在任何功能(注:这里是正常的程序功能哈),包括但不限于你可以在office中点击的功能。那么我应该如果解决这个问题呢?我的建议是使用宏录制功能,如要有你想要实现的功能,可以使用宏录制功能,然后去观察宏的实现代码,然后再移植到你的代码中。
为什么要学VBA?
那么我们为什么要学习VBA呀,首先第一点是利用VBA可以处理的数据量大,那么动则上万甚至十万的数据,可以非常轻易批量化处理,同时,我们可以对所写的VBA代码进行优化相关的工作,使VBA的处理速度快于公式数倍。
还有一个更加强大的功能,VBA可以调用DLL中的函数。这样的话,如果你会C/C++,那么可以自己编写相关的功能函数,再利用VBA调用,这样可以实现网络调用功能,这当然是一个很令人兴奋的功能。不过,你不用我这样的方法也可以,可以自行注册相关的对像,也能实现。所以VBA实现网络访问并不是一种办法。最后,我们还可以在VBA中使用SQL语句进行数据查询,是不是很兴奋?如果你不会SQL的话,可能不会太兴奋,但是如果你会SQL语句的话,那么你的工作量会极大的减少。反正我现在是非常的兴奋。当然,还有更兴奋的功能,VBA可以使用正则表达式,听到这个是不是更兴奋了?当然,你兴奋的前提是你是一个正则表达式使用者,合理有效的使用正则表达式,又会是一个利器。
所以,我们为什么要学习VBA,因为VBA中不光有他独立自主的功能,还有很多通用功能,如我刚才提到的SQL语句和正则表达式,所以这些真的会让我们很兴奋,这些功能会极大的解放我们的双手,让我们可以扩展自己更多的功能。
学习VBA的周期
这个问题,对于每一个人的情况,都有所不同,如果人有学习其他语言基础,会很快。所以,我只能以自己的情况向大家说明。
我的基本情况是,我是一名C/C++开发者,会python及其他语言,做开发做了有4到5年了,所以,我学习VBA是很快的,大体只用了一周,就把VBA学过了,又因为像SQL,正则表达式,DLL开发等功能,这些工作在我学习VBA之前,就非常熟悉了,所以没有任何学习成本。同时,因为我又是一名windows驱动开发的初学者,对汇编、逆向也略知一二,所以这些又加快的我对VBA的理解程度。当然,你的情况可能与我不相同,所以要根据你自己的情况进行确定。我私下认为,如果认认真真的学习,最多3个月,也就是100天,你一定可以成为一名比较熟练的VBA开发与使用者,当然,我认为很多人并不需要100天这么长的时间,因为VBA真的非常简单,适合初学者学习。
最后
在这篇文章最后,祝大家2022年五一劳动节快乐。假期中给自己充充电,让自己有一个真正充实的假期。其实我私下认为,如果你是一个熟练的程序开发人员,仅仅在五一劳动节的假期中,即可以入门甚至熟练VBA的基本开发流程,所以,请大家抓紧时间,赶快学习吧。多学一点知识,人生更加精彩。