2023-10
31

老脚本加新模块

By xrspook @ 10:52:25 归类于: 烂日记

几年以后,我终于又在某一个我用来核对账本的VBA脚本上加了两个新的模块。之前这两个模块的内容我都是手动实现的。第一个模块是初始化,就是把已经核对过的明细数据删除掉。初始化这个步骤眨眼间就完成了,因为是在同一个工作簿里进行。另外一个模块做的是数据抓取,抓取我需要核对的那个工作簿里的明细工作表。我要核对的那个工作簿里的汇总,那个工作表默认不抓取,因为那是用来核对的。另外一个跟明细数据和汇总数据不是一伙的工作表也不能抓取,因为那个表的数据格式跟其它的不一样。过去这几年来我做的事情都是手动的在VBA脚本所在的工作簿里删除掉已核对的数据明细,然后再把我需要核对的那个工作簿里的明细粘贴到VBA脚本所在的工作簿。这个操作很机械很单一,完全可以用VBA去实现,但是我却一直没有这么干,为什么呢?大概是因为最初的时候,我写的那个VBA脚本核心部分实现的功能已经减少了我绝大部分的工作量,简单实现了非常麻烦才能实现的事情,所以我觉得自己已经上岸了,相对来说,这些复制粘贴删除的东西比较简单。简单归简单,很容易能实现,但是日积月累经常性习惯性每一次都要整那么十几二十遍也是很烦的。为了简化初始化的那个步骤,我每次核对完就以不保存的方式关闭VBA脚本所在的工作簿,然后重新打开。

我不知道对以前的我来说,写着两个模块有多难,对现在的我来说,对今年已经在VBA脚本里浸润了好几个月的我来说挺简单。实现方法很简单,但是出来的效果我感觉上应该还可以改进。初始化的那个脚本已经很完美,没啥需要再进一步了,但是那个拷贝数据的脚本,如果需要复制的工作表有很多,屏幕会出现长时间的闪烁。那种闪烁源于不同工作簿之间切换导致聚焦位置改变。之所以这样,因为我所使用的复制方式是VBA教程里最简单的那款。微软的默认教程就是那样,当然你也可以使用不一般的方式。闪烁是因为不同工作表之间切换以及活动工作表活动单元格之间的变换。这个问题之前我已经发现。我以前的VBA脚本里也有这种问题。做一个循环,把某个工作表名称符合要求的就复制到 VBA所在的工作簿,这个循环是显而易见的,但是一个一个工作表去判断,一个一个复制显然就会出现很多次闪烁。如果我先去判断,然后把符合要求的全部选定,最后一次性复制,这样会不会就可以从多次闪烁变成一次闪烁呢?多次闪烁你肯定能感觉到闪烁的存在,但如果只是一次,估计那种闪烁感就会感知不到了。有人在网上提出过如何避免闪烁这个问题,但好像大家都没有在批量选择然后一次性复制上面想。我也想参考他们的做法改进,但好像不太适合我的实际情况。

我觉得闪烁这个问题是可以攻克的。

2023-10
1

9月挺过去了

By xrspook @ 10:48:02 归类于: 烂日记

已经放了两天的假,但是这两天我依然不得不跟工作有紧密联系。9月30里的晚上,从8点多开始我就在忙工作,虽然其实单位的业务是9点多才结束的,但是能干的那些我都已经先干了,但其实我又没有全部干完,但即便这样的话,还是干到了晚上11点多。之所以没干完,并不是因为我差那么点时间,而是我觉得我得主动变得不那么主动,因为我把别人的事情都干完了,别人就不知道干什么好了。所以没干完那些事是我故意留下来的。但实际上把那些事干完才算是一个完整的闭合,能保证数据准确。

这个月末是我第一次用某个VBA的脚本自动给我粘贴那些量不少,但是没什么营养的东西,起码对我来说是没什么营养的,但是上面就是需要用某种格式输出让他们看到。过去几年我都是人肉进行格式的转换,然后人肉进行复制粘贴,上个月末我来不及做出来,但是思路已经有,所以在月头的时候我就已经把这个做了出来,试过没有问题,但我不确定使用的时候会不会还有bug,结果如我所料,的确是有bug的,其中一个包非常的无语,是复制粘贴没对上位,为什么测试的时候没有看出这个问题我也不知道。另外一个不能说是我的bug,因为数据太小了,如果是四舍五入保留三位小数,那个数在三位小数以外,所以就被零处理了,但实际上那不是0。最后一个bug,其实之前我也遇到过,那是一个关于替换时选择关键词的东西,在什么时候替换?关键词是什么?如果用一般的思路去考虑,就是那样,但实际上选择那样的关键词不准确,所以最终替换出来的不是我想要的东西。

总的来说,这三个bug虽然存在,但要纠正过来还是比较容易的。对我这个写脚本的人来说肯定是容易的,因为我知道那个思路是什么,虽然已经隔了一个月,具体不再那么清楚了,但是我还在我还是很清楚当时自己用的大概是什么样的方案。如果这个第一次不是让我遇到了,而是别人遇到了,这样的bug,可能就比较郁闷,最终就可能只能用回我以前的老方式,人肉去做复制粘贴和数据汇总。

8月我花了很多时间写VBA,9月份我花了大概一周的时间做统计分析,然后又花了一周多的时间去学习《深入浅出统计学》,然后接下来就进入了疯狂的月末。因为同事出去学习了一周,9月的最后一周又是跟中秋国庆假期关联的,同事提前两天请假回家了,所以我感觉后半个月好像有很多事,好像一直都很忙,实际上也的确这样,因为单位的业务仿佛进入了疯狂的高铁模式,而且是悬浮列车的那种。几乎可以这么说,完全突破了我的想象力,无论是车还是船,作业的数量都是让我觉得是空前的。为什么一天居然可以整那么多车?为什么装的那些船永远都装不完?每天作业的仓号最多的那天有19个。明明某个客户一天就只出那么几千吨,但是每天都起码有5个以上的仓房在进出。每个客户一个仓房,但是有很多个客户,又或者只有几个客户,但每个客户都动很多个厂房,这两种情况都会让我抓狂。因为这意味着明明作业量不大,但需要做很多个汇总数据。

但总算这个9月我挺过去了。

2023-09
21

找事干

By xrspook @ 8:59:11 归类于: 烂日记

整个科室的人都出去培训了,除了我,所以一整天下来很安静,几乎没有人过来打搅我。只有一个过来找出去培训的那些人,神奇的是昨天单位微信群上也很安静,没有经常闪动。为什么会如此平静呢?

摸鱼这种事情有别人在跟没别人在对我来说没有区别,当我要摸鱼的时候,谁也阻止不了我。虽然有时摸鱼的时候不得不东躲西藏。可当我要认真的时候,同样也是没人能阻止我,不管那是上班还是下班,是白天还是半夜,只要我想干下去,哪怕那跟加班费没有半点关系,我也不会停下来,因为那是我想要干的事。

四周很安静,没有任何的干扰,也没有什么特殊的任务突然降临,所以我该做些什么呢?在做完平时应该做的那些事以后,我应该做些什么呢?摸鱼什么的摸多了也会觉得无聊,所以还是要找一些正经事干一下。有事可干的时候,你就只管去干,干就完了,但是当你无事可干又得找些事干的时候,的确挺烦恼。我觉得这个烦恼对我来说已经存在了好长一段时间。究其原因是有些时候你根本打不起去干某事。一方面你没什么事干,另一方面是有些事你或许可以干,但是你不想去干。这两个因素凑起来就变成了一个死循环,人就是在这个死循环里。慢慢地耗费着生命。

前天下午,我突然想到要以另外一个数据模板写一个VBA的汇总脚本。汇总脚本之前我已经写过,而且已经用了一个入户周期,2.1万吨的玉米入库绝大多数都是通过那个东西生成的,一直都没有问题,所以根据我的数据模板生成那个东西是完全没有毛病的,但如果我换了一个数据模板呢?我自己的数据模板没有毛病,其中一个很重要的原因是里面一些关键参数的设定我是以我的模板的某些数据量身定做的,但如果我换了一个模板我就得把某些数据转换过来。比如把两列的数据有条件地合并为一列,这是可以预知的,另外一些不可预知的我只能尽可能的把我想到的都做出来。当我遇到这个问题的时候。我感觉明明很简单的东西,为什么就要搞出那么多的花样呢?为什么这个不应该随心所欲的东西,实际上就这般随心所欲呢?大家都是说根据某个国标去做的列表,但实际上用起来的时候五花八门。我自己用的那个转换脚本是完全根据我的那些乱七八糟理出来的,但我不知道别人的乱七八糟到底乱成一个什么模样。这是一个无底洞,我自己的处理方式是嵌套很多层replace,但显然对小白来说,这样的操作非常不友好。所以在新的汇总脚本里,我采取的方式是建立一个索引,把集合五花八门的索引得先建立好了,然后我再以左外的方式匹配某些关键词,把所有的内容给关联上去。因为是开放的,可以很容易进行编辑,而且不需要他们懂得任何公式嵌套技术。这是我能想到的一个很大的坑,但我觉得还有一些更大的坑隐藏在阴暗处,比如别人生成汇总的那个数据模板不是我理解的那一款,他们需要在那个模板上手动编辑才能出结果。这就意味着索引的方式得发生变换了。还有一个就是万一在另外一个参数的地方,他们那个基础数据表还得进行某些修改才是他们汇总表的那个格式,那么那个地方也需要进行加工。综上所述,我觉得其实这些坑可以完全不存在,但问题就是设计软件的人和使用软件的人思路不一致,使用软件的人没有考虑到以后会被要求进行这样的操作,所以一开始默认套用了某些增加参数的方式。最终结果是他们得绕一大个圈、人肉查找好几个表才最终汇总出一个结果。这样就会导致汇总出错的概率提高,同时也会让人没有必要地忙乎一大轮,而且是天天都得这么忙。

如果把这些事情都理清了,根本不是问题,但可以肯定的是,不是所有人都愿意在这个理清上面花时间、把这一整套人肉的操作变成自动化。因为从根本上说大部分的他们只是为了仅仅完成任务,而从来没想过要把那做得更好、做到极致。

2023-09
1

小心很失望

By xrspook @ 11:03:32 归类于: 烂日记

当我正在潜心研究VBA+ADO+SQL的时候,某一天当我去搜索某个问题的解决方案,发现Excel里将要内置python了。那这个到底是什么样的python呢?星期四的晚上我看到ExcelHome的专业人士进行了进一步的解释。他们的专业人士说的东西,我还是比较认可的。

当我第一次听说Excel里面终于可以用python的时候,我并不太兴奋。为什么会这么说呢?因为是在Excel的某个地方写python,而不是在一个完备的IDE里写。这有什么问题呢?

可以这么说,Excel所有写代码的地方都让人挺不愉快。比如你要写公式,经常的情况是你选了那个,一会车,然后就没有了。如果你要写嵌套的公式,那些括号更加是会把你搞死。写公式的那个地方,你很难分得清全角和半角标点符号,于是你经常被卡在那个地方,然后被卡没了才发现自己在打勾之前没有先复制粘贴到其他地方,所以打那一大堆全部白费了。

在其它编辑器里也很郁闷。PQ有高级编辑器,高级编辑器好像要比公式智能一点点,但是又过于智能了,比如经常会帮助你自动添加一些符号,有可能是双引号,更多时候是逗号或者括号,但那并不是你想要的,你自己会把那补全。在你不知情的情况下,PQ给你添加上去以后,最终就报错了,翻找一大堆后才发现,那里不知道为什么多了一个符号。

PP里面写公式,如果是写度量值,情况还会好一点,因为你可以先做一个公式的校验,校验失败起码就意味着你基本上不用确定提交了,但是校验的时候到底是哪里不对,为什么不对呢?这得凭借你的经验。如果你进入到PP里面,在那个类似于Excel写公式的那个地方写代码,经常遇到的情况是你还没写完,就直接给你报错。因为报错了,你被卡住了,所以还真的漏了一些东西,结果当然是无果了。

相对于PQ和PP来说,VBA算是Excel里面可以写代码比较完善的地方。在VBA里有标识符和关键字,而且可以设置不一样的颜色,但问题是VBA那个编辑器除了会帮你增加空格以外,你别想能帮你进行任何的补全。无论函数名称还是那些你之前已经定义过的变量。被大家吐槽的最多的是一句判断没写完,要到其它地方复制东西,马上弹窗告诉你语法错误。当你运行不通过的时候,会有各种各样的弹窗,但绝大多数情况之下提示都没什么意义,因为没有针对性,你不知道该怎么改。

综上所述,在现有的Excel里面写代码,除非你非常牛逼,一写就对,万一你是那种粗心大意到极点的人,在Excel里写代码会让你非常崩溃。那个大家期待已久的python,据专业人士说,输入的方式是盲打。你别想Excel会给你补全,会给你提示任何错误。而且那个python in Excel是云上的东西,所以你的电脑上可以完全不安装python,数据通过网络云计算然后再返回结果。这就意味着算力最大的障碍就是你和服务器之间到底有多通畅?VBA完全可以脱机使用,那就意味着可以秒杀出结果,但如果我用的是python,需要实现同样的功能,我跟云服务器那边用有几万光年的代沟,甚至根本连不上,那么python那个地方永远都会显示#BUSY#,永远都不会有结果。如果一直挂在那里,或者某一时刻终于连上了,就会把结果反馈回来。我从来不太相信微软的服务器,因为从windows或者office软件系列的更新就可以看出,我们跟微软的服务器有非常深的代沟。现在这个刚刚有了雏形的python,居然是暂时只能用云计算,这样的东西能让人有多少期待呢?如果你不是在中国,如果你在美国,你是一个Microsoft 365的付费用户,而且是专业版的。可能会好很多,但是,我们在中国,我只能说希望越大失望越大。

我还是用好手头上的工具,实现我的小目标好了。

2023-08
31

着迷中

By xrspook @ 8:09:03 归类于: 烂日记

我已经不记得自己是如何走上这条写代码的不归路的了,确切地说我已经不记得具体我是哪一天开始研究这个跨表查询的问题。我大概知道顺序是怎么样的,但是具体是哪一天开始我实在已经说不清了。现在我天天都在写,天天都在写VBA、天天都在纠结VBA里面的SQL。我已经不记得这种状态已经持续了多长时间,反正即便是吃饭睡觉,我的脑子里依然想着那个东西。每天就是起床吃早餐然后完成必须做的工作,接着以最快的速度完成打卡,然后一整天都在那里写代码,不管上班还是下班。在这种状态之下上班,那8个小时突然变得好短。因为已经沉迷其中,所以到了下班时间经常停不下来,吃饭时间因此一再拖延。如果不是去饭堂吃,而是自己吃麦片,那就更加是一杯麦片,我根本不知道自己是如何勺到口里的,反正那杯东西我可能得吃一个小时以上。当你完全着迷于做某事的时候,你根本感觉不到其它东西的存在,比如身体的各种反应,比如某些疼痛又或者是饥饿等等。因为我知道我一旦着迷就完全没办法顾及其它事情,所以当我还没迷进去的时候,我就得先把其它必须做的做完了,否则是完全不能自拔的。

之所以出现有现在这个状况,是因为自从我实现了第一个跨表查询的任务以后,我发现一直以来我的很多东西都可以用VBA+ADO+SQL把它们联系起来。那些以前我有数据,但需要这样那样粘贴的玩意现在我可以把它们统一起来通过查询的方式直接获取结果。这样的好处是成功开发以后很省事,但是坏处是这样非常定制化,所以基本没有什么动态可调整的余地,即便设定了很多条件当你想加更多的时候无能为力。还有一个让人觉得挺累的,就是如果我做的是数据透视表,汇总那些事情不是我干的,是系统干的,我管好明细就好,我要什么明细我就搞到什么程度,但如果我得在一个查询结果里面把汇总考虑进去,无论是列还是行,我都得想办法把实现。相对于数据透视表来说,我觉得这种汇总是硬汇总,是设计的人必须得想好的,而且一旦变换某些条件,又得伤筋动骨调试一番。对用户来说,对只看到最终结果的那个人来说,可能会觉得很爽,如果他做过之前那些这样那样的复杂操作,他更加会觉得这实在是太爽了,但如果某个人之前没有经历过那些,他只是直接用这个捷径,从他的角度考虑可能他想知道更多,但是现在已经固定好的方式没办法满足他的要求。所以我还是觉得如果数据是规范的,用Power Pivot的方式把连动起来更靠谱。

PP非常的稳定,尤其是相对于PQ来说,但问题是无论是PP还是PQ,那个写代码的地方都非常不友好。正常的窗口操作基本不会让你挂掉,但是写代码的时候非常有可能直接让你卡死,必须得关掉重来,但是之前写的东西就全部废掉了。现在我之所以会在那里玩VBA,因为实际上我玩的不仅仅是VBA本身,而是VBA延伸出去的SQL。本质上,我在进行类似PQ或者PP的操作,虽然公式少了很多,隐藏技能也就是我至今无法猜透的更多,但就运行效率来说,尤其是对小数据的运行效率来说,VBA+ADO+SQL远远优于PQ和PP。我这里说的小数据是单表不超过1万条,最宽的表不超过30列。

可能,如果我不是用Excel去玩PP和PQ,而是用Power BI去玩,效果会很不一样。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress