# 久违的一次“Debug” **Published by:** [Th0mas](https://paragraph.com/@th0mas/) **Published on:** 2022-07-21 **URL:** https://paragraph.com/@th0mas/debug ## Content 许久没有碰代码,今天拿到客户送过来的Excel版WBS,没料到改了几个日期后,宏出错了,激起了深藏心底的Debug兴致,记录下处理过程。 WBS结构比较简单,一张平铺的task大表,基于每个task设定的预定开始日和结束日画schedule。总共40条task,在修改中间几条的日期后(9月某日修改成10月某日),画schedule的宏直接报错,选择End后,整个表就完全扭曲无法看了。 打开后台vba代码,倒吸一口凉气,估计是某位“大拿”天马行空写的,应该也不是专业“码农”写的,变量的命名让人摸不着头脑,比如“L_S_E_MAX”。module文件有七八个,看来代码行数也不少,默默的关上代码窗口,准备先从数据上进行定位。 先将我修改的几行删掉,重新执行宏,正常生成,于是怀疑原来我修改的那几行里面是不是有一些隐藏的 or 不可见的内容,于是重新插入新行,将主要内容重新填入,继续try,表格依然崩溃。在报错窗口处进入Debug界面,看到是定位在一个取值语句,看了指定Cell位置的几个变量,竟然有个变量是负数,不崩溃才怪呢。 加上”On Error Resume Next“,准备强制执行完看看会是什么样子。注意到10月份的日历表头没有生成,以及schedule的线完全不在日历的区域。寻思可能是对于日期处理的地方有问题。找到画日历头的函数部分,注意到两个代表最大日期和最小日期的变量,估摸着处理逻辑可能会有问题。在给这两个日期处理的结尾打上断点,开始步进调试(我庆幸项目比较小,才四十几条task。。。。)。第一遍快速掠过,但惊奇的发现,MIN的日期被赋了一个10月份的日期,7月的日期大?还是10月的日期大?脑子里恍惚了一下。查看了下表格日期的格式”22/10/1“,感觉不应该有问题。放慢速度单条看,发现在对比7月份日期和10月份日期的时候判断10月份日期是小,一阵狐疑,看了下变量的值,在断点状态,竟然是”10/1/22“,和”7/25/22“对比,而且,是直接用Range的方式来取值,变量是String!!! 基本确定是这个的原因,也不准备大改,直接将判断是日期后,统一转化为”YYYY/MM/DD“的方式,再赋给相应的值。修改完try了下,一把搞定!!! ## Publication Information - [Th0mas](https://paragraph.com/@th0mas/): Publication homepage - [All Posts](https://paragraph.com/@th0mas/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@th0mas): Subscribe to updates