在N年前编了一个程序,窗体按功能分类分成几个页,因为比较大,虽然有些问题也一直也没有心思去改它,但随着文件数量的增多,必须要解决一个问题:那个程序在执行时,相关的文件必须在打开状态,因此在这里不打开EXCEL的汇总和操作咨询以后,解决了一些可以不打开就能完成的任务,但有些关于要使用VBA"方法"的,还是必须要打开,所以只能采取了中间路线,这样就遇到了GetOpenFilename的问题. 前面的废话其实与能发现问题有关. 因为有各种功能,有的需要打开...有的有问题,有的没有...这样我就有机会比较GetOpenFilename出错的情况,然后再筛选总结, 通过对各段代码二分法执行查找到了原因,再经过网上信息的帮助,终于解决了. 总结如下: 这是GetOpenFilename在EXCEL中的一个BUG; 当使用了条件格式,并且条件公式使用了工作表函数; 比如 =$A$1>today(), =row()>4, =countif($A:$A,$A$1)>4...... 并且该条件会被执行到(是指如果有不止一个条件)时,GetOpenFilename不能正确工作了. 我这个贴关于GetOpenFilename的疑惑16楼里的附件,如果改变单元格的内容使得满足第一或第二个条件,程序就没问题了. 这也让我找了很长时间才找的了这种情况, 汗! 解决方法如下: 1.删除条件公式.(这也是废话) 2.在工具条/或菜单里运行的宏. 3.条件格式里的公式写在辅助单元格, 比如=$A$1>today()写成 =$A$1>$B$1, 辅助单元格$B$1写公式=today() 4.滚动工作表的单元格,使的条件格式的单元格不在可见范围内.(我这个贴关于GetOpenFilename的疑惑13楼里的附件就是因为条件公式单元格G34被我滚到外面了,所以大家运行都正常). 5.不要将含那种条件格式的工作表作为当前表,如果sheet1有,那就让没有条件格式的sheet2为当前表,注意的是必须所有打开的工作簿都这样而不仅只是活动工作簿需要这样. 6.请大家有更多发现后再补充......
这是我的经历和总结,希望对大家以后使用GetOpenFilename有所帮助. 附件是一个有问题的文件,相信大家已经知道原因了.(CTRL+G 找条件格式): |