这确实是一个问题,也是一个重大发现。
出现这个问题的原因是:在目前的代码下,从打开工作簿第一次调用日历窗体开始,到关闭工作簿为止,用的都是同一个日历控件,期间对日历的每一次操作都只是显示和隐藏这个日历。所以,每一次调用日历窗体时显示的都是上一次选择的日期。如果是在固定的单元格这样显示,其实是没问题的,能保证单元格值和日历窗体显示的日期一致:
图1 在固定单元格调用日历
比如上面图1中,我选择了一个日期,日历窗体自动隐藏起来;如果下一次再在这个单元格调用日历窗体时,弹出来的是下面图2这样的:
图2 同一单元格,第二次调用日历
那就会很奇怪。所以在弹出时,就得保证单元格和日历值显示的是一致的。但是在目前的代码下,如果在多个不同的单元格调用这同一个日历控件,就明显的是个问题了。
在提供我的解决办法之前,先说一点,这句话
楼主发现一个问题,只要前一次选了一个日期,后续再调用日历控件时标颜色的当天日期就错误了就自动变为前一次选择的日期 中的“后续再调用日历控件时”,应该是“后续再显示这个日历控件时”;“就错误了”、“自动变为”,其实是压根没变,还是前一次选择的日期,日历只是隐藏了又再次显示而已。这句话是把当前代码的行为和预期的行为混淆在一起了,描述得不太恰当。
上述问题的解决之法如下(诸位或有更好的方法,还请不吝赐教于本作者):
如果要每次显示日历控件时都默认选中“今天”日期(虽然不推荐这种做法,因为违背了上面所追求的一致性),可以每次调用日历控件时都用新建的日历控件,也就是新建日历控件对象,代码做如下图3所示改动:
图3 注释掉这两行代码
如果要根据不同单元格的值来显示日历控件,则按如下图4-1和图4-2所示改已有代码:
图4-1 窗体模块新增成员
图4-2 向窗体模块新增成员传递活动单元格的值
(即新增红色方框中的代码)
完整代码和示例工作簿请见附件。后续如有其它问题欢迎继续留言讨论!
|