2025-11
18

Excel VBA的一些心得

By xrspook @ 8:28:23 归类于: 烂日记

虽然写Excel VBA已经有好长一段时间,但实际上对一些很基础的知识我还是不扎实的。比如ThisWorkbook和ActiveWorkbook到底是怎么指定的。光说这两样我好像明白,但是当我要使用的时候就感觉老碰钉子。这个东西使用不当,就会经常被弹出错误说某个工作簿里面没有某个工作表,或者说某个工作表已经存在了,不能再新建。不同的写法意味着同样的VBA脚本发起的那个工作簿不一样,有可能要在打开有数据的那个工作簿里发起,又或者直接是在VBA脚本所在的工作簿发起,不需要打开源数据工作簿。除了这个以外,还有就是当刷新数据要放在你已经建立的工作簿的超级表里,该如何删除超级表之前的数据?有两种选项,一种是把数据全部清空,这种情况不改变超级表的格式的,之前已经使用的行会继续存在。这里用的是clear命令,另外一个则是用delete的命令,那样的话原来工作表里面的数据全部删除,只剩下最后一行。二者的差异就在于,如果是用delete命令,如果那个超级表下面还有数据的话,那些东西将会上移,如果你又在那里插入新的数据,可能就会乱成了一团。所以如果在一个工作表里,你安排了很多个超级表,而你又确认那些超级表的格式不会改变,基本上也就那几行,又或者你不确定到底有多少行,但你能确定行数肯定不会超过多少行,这样的话,当你要用VBA把刷新的数据同时写入这些超级表的时候就应该用clear命令,这样的话,刷新的数据就可以指定从哪里开始。如果在这种情况下,尤其是工作表的下面还有一个工作表,你用了delete命令那么当你清空数据再写入数据,下面那个超级表对应的那个区域肯定会乱来。

没人跟我说过这些细节,这是在我摸索的过程之中,经历过一次又一次撞板之后得出的结论,所以如果可以的话,超级表你可以在旁边建超级表,但你不要在超级表的下面建超级表,尤其是那种你根本说不准上一个超级表到底有多少数据的情况下。多建几个工作表,在不同的列起始不同的超级表,一点问题都没有,但在很多人的固有思维里面,Excel就只是一个放表的工具,上下左右都可以放,但是就数据处理的便捷和难易程度来说,超级表的放置其实是得遵循一定规则。

自从知道了ADO+SQL之后,我就经常把这两个东西作为我最大的杀器,把经常使用的Excel表当数据库。但Excel始终不是数据库,最大的差别我觉得是虽然ADO+SQL可以用类似数据库的方式理解Excel表格,但因为Excel表格可以变换不同的格式,所以当在某一列理论上都是数字的那里突然意外有一格被插入了文字,那么ADO+SQL进行转换的时候就会出毛病。刚好你又对那一字段进行了分组汇总,那程序必然进行不下去。通常情况下,人肉很难发现这个问题,因为不知道在哪一行,突然插入一个文字是个意外。一般情况下,调用ADO+SQL把工作表里面的区域读取格式化的时候没有理会超级表的范围。如果有进一步的限定,实际上是可以设定范围的,但一直以来我都没有进行这个行的主动限制。

掌握了SQL以后我觉得Excel自带的那些公式实在太复杂了,参数很多、形式变来变去,有些用乘号,有些用加号,有些用*。

还没有评论

  1. 评论关闭,不让你说了。
© 2004 - 2026 我的天 | Theme by xrspook | Power by WordPress