一个审计人员的VBA+VSTO学习之路

52 次浏览

我是一名执业注册会计师,在会计师事务所从事审计工作16年,从零基础开始,跟着郑广学老师的课程学习VBA和VSTO已经8个月,现在解决实际工作中95%以上的应用问题是完全没问题,也开发了自己的第一个excel插件,目前已有几十个单位同事在用,给他们把日常很多几十分钟完成的事情提速到了几分钟解决。部分功能区截图如下,几乎没有窗体交互,因为我确实还没有学会,用到窗体的地方,我现在都是用excel模板的方式解决的,这也是我现在的水平。

一个审计人员的VBA+VSTO学习之路插图

一个审计人员的VBA+VSTO学习之路插图1

一个审计人员的VBA+VSTO学习之路插图2

一个审计人员的VBA+VSTO学习之路插图3

一个审计人员的VBA+VSTO学习之路插图4

一个审计人员的VBA+VSTO学习之路插图5

借此机会,再次感谢郑老师课程对我工作的帮助!郑老师的课程讲解细致、课程答疑贴心、功能模块复制即用,围绕基础较差的学员如何解决实际问题开展,没有花里胡哨的内容,属于实战派的老师!更重要的是,课程赠送的VBA代码助手,这简直就是神器,说出需求VBA代码助手自动生成可用的代码,解决问题变得非常简单!此外,在VSTO880框架加持下,在VSTO里写代码,几乎和VBA一模一样,一周开发出excel插件绝不夸张!以下便分享一下我学习VBA和VSTO的一些心得!

  1. 初识VBA

我是一名执业注册会计师,在会计师事务所从事审计工作16年,知道“VBA”这个词,大概是在15、16年左右吧,当时无意发现立信事务所的“报表附注系统宏”,感觉很厉害,虽然代码是公开的,但从未接触过VBA的我肯定是完全看不懂的,接下来通过百度、代码中的工作表名称、数字等关键字词,花了一个月时间吧,把其中一个功能修改成了我们事务所的格式,然后就一直沿用至去年5月。在此期间,也想通过学习,把立信所的这个工具修改为自己可用的,也找了网上一些公开的VBA课程,咬着牙学习大概三周时间吧,实在学不下去,最终没有解决任何实际问题。我毕业学校也算顶尖高校,注册会计师我能一次性通过,自认为学习能力不算差,现在回想,可能更多原因还是郑老师才更切实体会零基础学员的痛。想表达什么意思呢,就是老师的课程对零基础的学员特别友好,学习前不需要任何的基础都可以。

  1. 开始学习之路

在2023年4月时候吧,因为接了一个比较大的审计项目,时间特别紧张压力巨大,脑子里整天都是想的如何能提高效率,五一假期期间,百度各种搜索如何提高VBA编程效率,无意发现老师的VBA代码助手官网,迫不及待下载安装代码助手,赶紧试一下自动生成代码的功能,一试果然是心中期盼已久的神器,二话不说直接购买了老师的课程,然后就开始了VBA的学习之路!大概学了3周时间吧,在看到老师的VSTO课程介绍后,毫不犹豫的也直接购买课程,真的是问都没问,完全是因为在学习VBA的三周期间,感受到老师课程的好处,想着VSTO课程肯定也不差,一定有我需要的内容!更重要的一点,我感受到了老师对这个行业的热爱,老师课程核心点是帮助学员解决实际问题,对学员的认真负责,完全对老师的信任而购买的VSTO课程。老师还记得当时我想购买1V1私教课程吗?在了解我的实际情况和需求后,您没答应,说我没有时间系统学习打卡,不能达到您对学员的要求,购买私教课程也不符合我快速完成任务的预期,当时我也挺郁闷的,惊喜的是现在还有这样的老师,有人购买课程都不要,老师人品是杠杠的!

  1. 学习心得
  2. 重视基础

任何知识的学习基础才是核心,VBA学习自然也不例外!由于工作性质的原因,我常用的VBA功能,其实就是一些重复的操作,打开工作薄→复制粘贴→保存关闭工作薄→结束,基本不涉及大量数据处理、图表图片操作,但恰恰就是这点最基础的知识解决了我工作中大量的问题!在刚开始学习的时候很心急,总想着一下抱个金娃娃,各种复制代码粘贴,解决了小部分问题,但也就止步于此,在需求稍微有点大的变动的时候,解决不了实际问题。因为一个问题卡住了去问老师,老师首先给我强调一定要先学基础,然后解答了我的问题,最后告诉我,再不去学基础知识,以后类似的问题不会再解答。是这样的一个问题,用Workbooks.Open方法打开工作薄后,不知道怎么引用这个新打开的工作薄。接下来在老师的建议下,从头到尾把基础知识系统学习了一遍,很多之前不会的问题迎刃而解。从单元格、工作表、工作薄的引用和操作开始,到基本的循环和判断语法结构,再到数组……

多动手敲代码

好记性不如烂笔头,光看不练假把式,熟能生巧,习惯成自然,在学习过程中,代码一定要多动手敲,看得懂不等于能自己敲出来。在最开始阶段,我是用老师课程中写好的代码,自己一句一句调试运行,搞清楚每句代码是做什么用的,运行过程和结果是怎么样的,代码逻辑是怎么样的,把这些都搞明白后,一般会在1-2天之后,自己再独立把这个代码重新写出来,遇到问题都是去翻已经学习的基础知识,复习的同时加深印象,直到代码可以运行为止,这是一个看似简单但确十分艰难的过程,但在反复的过程中自然而然就会了,最终达到信手拈来的境界!这就像很多打五笔的人,到后面根本就背不住字根,因为已经成为一种习惯,一种条件反射,在背后是反复的练习的心酸,当然付出自有回报。在后面阶段,当遇到新的问题时,我一般不会直接用老师写好的一些功能,一定是要通过自己的努力,从头开始把代码给敲出来的。现阶段,主要是通过学习,发现更简洁的代码、更清晰的逻辑、更简便的方法可以实现之前代码的功能,于是我又把之前可以跑的代码几乎重新敲了一遍。

函数/模块封装

不得不说,老师课程这方面非常的优秀,在讲解知识的过程中,也给学员封装了很多常用的功能函数,遇到问题时直接使用就可以。大多数学员都不是专业的程序员,学习VBA和VSTO根本目的不是为了编程,而是解决实际问题,在此基础上在研究一下有兴趣的内容,至少我是这样的。比如老师封装的递归遍历子文件夹获取文件的函数,需要我们掌握这个函数是如何实现的吗,不需要,我们只需要调用就可以,我个人觉得这个内容已经超出我的知识能力范围,也不会花时间去研究他。又比如ADO+SQL查询功能、数组排序功能、字典多key多列求和功能……等等,都是直接使用就可以,非常方便!利用VBA代码助手的收藏功能,将自己平时常用的过程/函数收藏,需要时候直接调用,简直是超级神器!

一个审计人员的VBA+VSTO学习之路插图6

师傅领进门,修行靠个人,老师的课程把基础知识和功能模块交给我们,尽管功能已经十分完善强大,但不可能做到面面俱到,能够帮助我们解决99%的问题,剩下的1%就需要自己去钻研,我觉得微软的帮助是一个不错的选择,首先他是官方文档,其次也有是列代码,是可以直接复制运行的。在掌握基础知识后,结合微软帮助文档,一定可以解决更多的问题。老师的课程没有关于WordVBA,在学习老师的excelVBA课程后,我对VBA语言的逻辑有了粗略的认识,总结三个关键词就是:对象、属性和方法,word和excel都有自己的对象、属性和方法,虽然这些都不相同但基本逻辑、语法是一样的,在通过查找微软帮助和老师的帮助下,在wordVBA方面基本也能解决实际工作中80%的问题,也写了一个word附注的工具,实现word和excel数据的同步更新、表格自动调整、段落设置等常用的功能,大致长这样:

由于没有时间去研究功能区排版,按钮都是一个一个排的,显得比较重复及冗余,但能实现想要的功能也很满足了,其实这个工具的主要功能,就是前面提及的立信事务所的“报表附注系统宏”的功能,相当于我现在基本可以独立写出来了。

行业经验与技术

如前面所述,截止到现在,从VBA和VSTO技术方面看,VBA我可能勉强算入门了吧,但VSTO是真的连入门都没有,但通过学习也超过了我预期的结果,主要原因包括以下几点:(1)老师的课程附带很多封装好的功能,我的目的很明确,我不是要去专研VBA语言,而是要能实际解决我的问题,我是要使用工具而不是自己去编制工具,在我的了解范围内,老师的课程是最适合我的;(2)从工作专业领域,毫不夸张的说我也算顶尖的,正是对实际工作的理解,我们到底需要什么,专业代码的逻辑是怎么样的,或者说行业经验吧,专业领域的插件,是需要建立在行业经验的基础上,自己做的东西才是最适合自己的,关键是我想怎么改就怎么改呀。比如市面上很多收费的免费的excel插件,主要功能大概都差不多,但因为这不是专业领域的插件,是通用的,不适合我,说句不好的话,我用WPS不香吗?所以呢,插件的好坏,不完全是看代码写的好与否,还要结合专业领域的切身需求,符合自己需求的插件功能才是最好的。

解决问题案例

一个审计人员的VBA+VSTO学习之路插图7

在学习了老师的VBA和VSTO课程后,自己也用VBA写了一些小工具,同时也开发了自己的第一个excel插件,借此机会结合工作场景,分享下解决实际问题的案例,说实话看着代码自己都想笑,因为代码写的实在很菜,但确切实解决了工作上的问题,同样的功能,别人的代码10秒搞定,我的需要15秒,但这和几个小时甚至更长时间比起来又何乐而不为呢?在学习了老师的VBA和VSTO课程后2个月,excel插件基本就已经写完了,大致长这样:

批量创建TB

做审计的同行应该都知道,事务所都有自己的试算平衡表格式,需要把企业的未审报表填写到试算平衡表中,几家企业倒还好,就是复制粘贴嘛,实习生可能都可以干的,但如果是几百家甚至上千家呢?比如我现在所在的项目,大概需要填写1100家试算平衡表,肯定是需要花时间的,而且真的很容易粘错,在学习了老师的课程后,我用了两种方式实现了批量创建试算平衡表的功能,节约了大量的时间,excel插件中的是方法之一,1100家试算平衡表,大约用时10分钟,也就是1秒中可以生成两家试算平衡表,点下鼠标抽根烟泡杯茶,工作完成了。原理很简单,就是把企业未审报表和试算平衡表的单元格一一对应,剩下的交给代码,然后就是分别打开企业报表和试算平衡表,复制粘贴,保存关闭,所用的其实就是VBA最最基础的单元格、工作表及工作薄操作。另一种方式是直接使用老师封装好的ADO模块实现的,是直接从财务系统数据库取数的,老师给我们提供了工具,编制好底层逻辑代码,我们只需要编制业务代码,大概也就十几行吧,和插件的业务代码逻辑是一样的,区别仅是数据来源不同,一个来自数据库,一个来自企业的未审报表。

批量打印设置

可能很多同行都在使用鼎信诺编制工作底稿,面临的问题就是工作表是没有设置好打印格式的,在整理打印底稿阶段,也会花大量的时间去调整打印格式,于是就写了这个功能。这个功能的实现方式更菜,直接录制的宏,然后加了一个循环,让VBA代码去打开工作薄遍历工作表,并自动设置打印格式,然后保存关闭。比如一家企业大约30个左右科目底稿吧,设置打印格式大概也就10秒不到,掏出打火机烟没点燃,工作完成了。所用的功能是什么呢,还是工作表和工作薄最基础的操作。

以上就是打印设置的代码,是在VSTO里写的,是不是似曾相似的感觉?没错,就是和VBA长得很像,当然这是在老师VSTO880框架加持下才能实现,框架实现了从VBA到VSTO的无缝转换。从代码备注说明也可以看出我的学习情况,基本代码都是一句一句调试的,不清楚的备注好,对我来说这是一个很艰难的过程。

一个审计人员的VBA+VSTO学习之路插图8

穿透查询

还是以我现在所在项目为例,在拿到企业1100家未审报表后,要做总体审计策略吧,需要分析下哪些单位数据比较大,是重点审计单位,这个数据怎么汇总呢?工作量还是比较大的,于是两个领导开始讨论如何分工复制数据,谁谁谁负责汇总1-300家,谁谁谁负责汇总301-600家,这时我默默的点根烟,不到两分钟数据汇总完了,领导很惊讶,这怎么这么快啊?在简单了解后,立即要求我在闲季给部门培训VBA,给我2万培训费用,我心里在想,我会个鬼呀。这个功能怎么实现的呢,用到的基础知识就是字符串拼接,以及老师封装好的递归遍历文件夹获取文件函数,把链接的地址字符串拼接起来就完事,老师的课程中都有详细的讲解的。

其他功能

比如工商截图、快递信息查询及截图、函证地址查询核对、财务报表查询、合并TB链接与附注汇总、关联方核对等等,都是审计常用的功能。老师切身体会零基础学员的痛,我一直在事务所从事审计工作,同样也能体会审计工作中的痛,于是围绕如何节约时间提高效率写了一些常用的功能。另外也单独写了一些其他的工具,比如函证生成器、审计抽样工具,就刚刚又临时写了一个汇总企业存货跌价测算表的工具,其实也就是20行代码,代码写的也不好,但可以在遇到问题时随手解决。在数据汇总后,还有一个字典多列关键字多列求和的代码,都是老师课程中现成的代码模块直接调用,解决这个实际需求大概花了10分钟吧,如果没有老师的代码助手和现成的模块,说实话我搞不定,如果会写代码但没有代码助手和模块,我想这个功能也绝不是花10分钟就可以搞定的,这就是学习老

一个审计人员的VBA+VSTO学习之路插图9

师课程的好处,就好比WPS有海量模板可以直接使用这个道理。

再次感谢郑老师,能学习到这样的VBA课程,是我的幸运,以最小的学习成本,最大限度的解决实际问题。说实话,我是不可能花很多时间去学习任何编程语言的,不是我的专业领域,时间成本太高,老师的这个课程,恰好适合我这样的学员!

特别感谢

借此机会,也特别感谢郑老师的VSTO学员周杰老师在这段期间对我的帮助,周杰老师非常热情,看见别人的问题都是不留余地的解答!记得刚接触VSTO时,有次因为窗体引用报错的问题,然后在群里提问,大家解答的基本都是为什么报错,正确逻辑是怎么样的,不知道当时那个着急的心情啊,我都说了报错原因我知道逻辑也懂,就是不知道窗体的全称(System.Windows.Forms)是什么,就是没人直接给我解答,然后是周杰老师给我解答的,自此以后就没有少打扰周老师!

一个审计人员的VBA+VSTO学习之路插图10

只要会VBA 3天就可以做出自己的Excel插件

带一机一码注册 客户端安装包制作 全套解决方案

VBA代码转VB.net封装DLL VSTO撤销功能 全局快捷键 自定义函数 全方位模板

免费试学网址vbayyds.com