一次面向搜索引擎的vba编程
其实也不能说一次,上个月已经把主要功能写了,ld使用反馈后才搞清ld的全部需求,这次花时间重做了下.搞清业主需求很重要呀.
字典
简单来说,主要需求就是把加班费自动填上卡号,再分开成业务科室和行政科室汇总做2个报表.按照b站的教程,分类汇总用到了vba字典的特性:key值不能重复,核心代码就一句
dic("'" & Preview.List(j, 3)) = dic("'" & Preview.List(j, 3)) + CInt(Preview.List(j, 2)) 'preview是listbox
缘起
其实最初ld是拿输入好的姓名,让我填相关信息,我看有花名册,就直接vlookup了外加pivot了,结果加班费发错了,ld受了批评.😰
原来vlookup只能找不重复值,而表里面姓名重复的多了去了,几千人我也没仔细看,以后取名还是不要那么大众,如果所有人姓名跟身份证号一样唯一,羞愧难当.知道问题后,本来还是想在公式上面想办法,但是客户(ld)表示记不住那么多公式,需要一键生成,这个就只能学习窗体控件了.写了一个原型–一个能分业务和行政的窗体.
在三月份的加班费统计中试用,出bug了,bug原因很简单,就是字典key的唯一性问题,因为姓名,卡号,科室需要一一对应,更好的数据结构应该是唯一key,对应一个姓名,科室之类的数组,但是,好在数据量不多,多来几个字典顺利解决问题.
事故
上月设想是还要加上一个最终汇总拷贝粘贴的宏.因为ld还要分成几个表格的留底,所以不能大一统生成,需要分开输入后统一汇总.具体业务流程没有参考性,就不多说了.
可惜电脑重装了下,宏还没来得及试用就没了,ssd还不能用数据恢复软件,只能重新写.再拿到当初的代码的时候,终于知道什么叫eat your dogfood,没有注释的代码看起来真让人头大,再加上当初面向百度编程,有很多代码片段都没完全弄明白.
思路
既然已经有了窗体,干脆所有功能集中一起.按钮一多,重复代码问题就显现出来,于是把以前面向过程的代码又抽出公用函数,本来还想做成一个类,但是后来把函数参数简化后,能满足需求,就算了就是这么容易放弃.其实还可以进一步模块化,但是我想还是等学习了更多,再来重新弄.
尾声
其实整个开发过程中,很多时间花在了流程界面设计,和输入输出控制上,再有就是测试,但是我没有那么多时间,基本测测结果正确就完了,结果就是漏洞百出,但是能用的这么一个东西了.🙂,待ld再使用的过程中慢慢反馈bug吧.
本来这样七拼八凑的代码不应该放上来,但保不齐有我这样水平的后来者有类似需求,如果有幸能被他/她发现,也算能节约一点时间,不用趴在excelhome之类的论坛慢慢翻帖了.