# 久违的一次“Debug”

By [Th0mas](https://paragraph.com/@th0mas) · 2022-07-21

---

许久没有碰代码，今天拿到客户送过来的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了下，一把搞定！！！

---

*Originally published on [Th0mas](https://paragraph.com/@th0mas/debug)*
