追求更好
实现功能,我觉得只是最基本的要求。接下来我会考虑到底有什么是可以优化的,比如如果我做了很多个判断,我能不能少做一些,把那些判断合并起来或者里面我做了不少循环,循环通常是为了赋值,赋值完以后我有没有立即就把那个数组或者字典之类的释放。我不知道那些东西释放跟不释放效率会不会相差很多,但可以肯定的是,如果我在一个脚本里同一个数组或者字典的名字被重复用多次,而在使用之前我又没有重新定义,在上一个数组或者字典使用完毕之后,把它清除干净会让我安心很多。
一开始要实现某个功能的时候,我都是写完一大堆,然后发现另外一个功能可能就是在那一大堆里面改一点点,然后就可以实现了,我就会把那一大堆复制粘贴,然后改一点点,发现的确是可以的,但是当这个脚本真的要放出来的时候,我就得合并同类项,能不能把这两个东西通过以某个判断把它们合并在一起呢?如果那两段话的差别就只是某个条件判断不一样,我能不能把那个条件判断放在前面,然后把判断结果赋值给一个变量接着后面就可以在同一段话里面引用那个变量了。这样的话从脚本的体积来说可以缩短很多,起码可以减肥一半,甚至更多。
一直以来我都想不通,如果我要从一个工作簿里复制某个工作表到另外一个新的工作簿。那么我是应该把整个工作表复制过去呢,还是说在新的那个工作簿里面新建一个工作表,然后把原来那个的内容复制到那边。在生成这篇blog的时候,其实我依然没有做过这种尝试,到底哪一个的效率会高一点呢?我选择的是直接把工作表复制过去。当我全部复制完毕以后,因为每个工作簿新建的时候都会有一个默认的工作表,我最后的步骤就是把默认的那个工作表删掉。但是让我想不明白的是,如果我不是在VBA里操作,而是直接操作Excel,我在某个已经打开的工作簿的工作表的表名那里点右键之后选择在新的工作簿里面建立这个工作表的副本,那么新的工作簿里是不会有默认空白工作表的。这是不是证明,如果我在新建工作簿里面设定某些参数可以不让那个默认空白的工作表生成呢?因为如果这样的话,我就不需要在后面再做一个删除的操作了。从数据上说,删不删除都无所谓,因为那个是空白的,但是对完美主义者来说,总觉得有那么一个空表实在很碍眼。
当我终于实现了批量生成文件以后,我发现批量生成文件的速度很慢。慢到大概每个表都需要一秒钟,如果要批量生成9个表就得9秒钟甚至更多。在考虑如何缩短时间的时候,我马上想到我把那些批量生成的表全部都放在一个工作簿里,事情就变成了批量生成一个工作簿里面的N个工作表,而不是生成N个工作簿。接着我发现这样的确能提高一点速度,如果要生成9个表的话,时间会从大概9秒钟下降到6秒钟,但是我觉得还是不行。于是我就开始研究我这个生成的过程到底有没有什么地方可以改进。因为之前我的策略是生成9个工作簿,所以我肯定是从原始的文件里先把自带格式的工作表复制到新的工作簿,然后再把新的数据粘贴到新的工作簿,然后保存。同样的思路,用在一个工作簿的N个工作表里,效率很低。所以接下来我做的就是新建一个工作簿,然后把带有格式的工作表复制过去。接着在新的工作簿里面复制里面带有格式的工作表,改名,接着在新的工作表里赋值。这样最大的区别就在于在多次复制工作表的时候,我不再需要跨工作簿了。这么一个不跨文件的操作,直接让批量生成的时间从6秒下降到2秒,效果非常明显。我觉得两秒也几乎基本上是个极限了,因为即便我用最简单的循环,基本上不在工作表里面录入什么数据也需要接近2秒的时间,现在我粘贴了那么多数据,还有就是生成这些数据之前还进行了N步操作,整个过程下来不到三秒,我觉得完全可以接受。
追求更快更好是从来没有尽头的。
还没有评论