ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 17023|回复: 14

[分享]GetOpenFilename之bug和解决方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-7-20 21:37 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Application对象

在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 找条件格式):

 

点评

知识树索引内容:8楼  发表于 2013-9-25 21:25

TA的精华主题

TA的得分主题

发表于 2007-7-20 23:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-7-27 18:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-8-2 13:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-1-19 19:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-4 18:24 | 显示全部楼层
真是神奇!真的是“条件格式”引发的吗?简直不敢相信……

TA的精华主题

TA的得分主题

发表于 2009-6-5 22:43 | 显示全部楼层
我也正在为这个问题头痛,按楼主的说法,是没有办法彻底解决的了?毕竟我公司办公时,一般人都开着几个Excel,没准哪个Excel里就有带公式的条件格式,我写的工具总是被同事们追着解决这个问题。
下载你的文件,然后明天试试直接调用Windows的API看看行不行。

TA的精华主题

TA的得分主题

发表于 2009-6-6 17:50 | 显示全部楼层

使用WindowsAPI在家里测试通过

周一上班拿到公司去替换,使用里面的GetOpenFilename函数直接替换Application.GetOpenFilename即可,入参都是一样的,只不过窗口弹出来后稍有些不同,test()过程的两个调用体现了一点点不同。
另外就是通过测试,发现Office2007和WPS2009的Application.GetOpenFilename都没有问题,有条件的话就升级为Office2007吧。这也说明这个问题通过补丁应该是可以解决的,不知道MS有没有发布相关补丁喱?

GetOpenFilename.rar

19.57 KB, 下载次数: 189

WinXP+Office2003和Vista+Office2007测试通过

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-8-26 23:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
当要打开的excel已经打开了,弹出对话框提示,怎么办呢

TA的精华主题

TA的得分主题

发表于 2009-8-27 00:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 05:12 , Processed in 0.046976 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表