ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决][求助]关于GetOpenFilename的疑惑

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-7-19 19:27 | 显示全部楼层 |阅读模式

为什么下面这段代码, 有时即便你选了文件,但还是显示没有选择文件,但将EXCEL关掉再打开又好了,过一会又不行了.

检查下来是因为在那时,Nfilename得到仅是一个string.(正确时应该是Array)

Option Explicit

Sub Macro2()
    Dim Nfilename As Variant
    Nfilename = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , "Ñ¡ÔñÎļþ", , True)
    If Not IsArray(Nfilename) Then MsgBox "你没有选择文件": Exit Sub
End Sub

以前遇到过如果对Nfilename 使用和布尔比较后会这样, 但从来没有碰到过这种情况.

[此贴子已经被作者于2007-8-16 12:04:41编辑过]

TA的精华主题

TA的得分主题

发表于 2007-7-19 20:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

To: willin2000版主

帮助中已经说明:本方法返回的是选定的文件名或用户输入的文件名。返回的名称可能包含路径的说明。如果 MultiSelect 为为 True,则返回值将是一个包含所有选定文件名的数组(即使仅选定了一个文件名)。如果用户取消了对话框,则该值为 False

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-7-19 20:35 | 显示全部楼层

谢谢taller兄, 这个我知道的.

现在的问题是我选了文件(一个或多个)后,还是说没选文件.即Not IsArray(Nfilename)永远是TRUE,不管你选不选. 要关闭EXCEL 重来才行,

当Not IsArray(Nfilename)永远是TRUE时, 我发现Nfilename是一个字符串类型, 所以此时如果写s=Nfilename(1),程序会报告出错:类型不匹配.也就是当出错时,即使你选了文件,我把代码DEBUG成:

Sub Macro2()
    Dim Nfilename As Variant
    Nfilename = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , , , True)
    s=Nfilename(1)

End Sub

s=Nfilename(1)那时会出错.

并且此时,插入任何新的模块或程序, Nfilename = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , , , True)得到的Nfilename永远只会是STRING 直到退出EXCEL重来.

TA的精华主题

TA的得分主题

发表于 2007-7-19 20:40 | 显示全部楼层
在我的Excel2003中测试多次,没有你说的问题,只要不选择文件,IsArray(Nfilename)结果就为False

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-7-19 23:23 | 显示全部楼层

是啊,Excel2003中没有这个问题,只是Excel2000才会有,我在另一台机子上运行

 Nfilename = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , , , True)

IsArray(Nfilename)居然总是FALSE,也就是GetOpenFilename multi根本没办法用上.

TA的精华主题

TA的得分主题

发表于 2007-7-19 23:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我在2002中试过楼主的代码,没有这个问题

用了MULTISELECT参数为TRUE,选中一个文件,返回的也是ARRAY,不是STRING(除非你的位置搞错,比如逗号少了一个,但贴子上都给足了4个)

更早的OFFICE2000和97不知有没有这个问题(唉,97都不知道有没有GETOPENFILENAME)

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-7-20 00:01 | 显示全部楼层

坛上是否还有在用2000的, 或以前用2000时也遇到过这个问题?

希望能找到解决的办法,因为不全是不可以,有时还是能返回数组的.

我的猜测是Dim Nfilename As Variant没有起到作用,即EXCEL自动"聪明"地认为它应该是STRING.

[此贴子已经被作者于2007-7-20 0:07:36编辑过]

TA的精华主题

TA的得分主题

发表于 2007-7-20 06:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

按你说的情况,只是要凑合着用,不是要追根究底,倒也不是不可以

不要对NFileName作判定数组,而是先作FALSE判定,因为选中文件,不管是STRING还是ARRAY,总之是成功了,放弃才是FALSE

然后再判定,IS STRING THEN ,IS ARRAY THEN ,做两个分支好了

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-7-20 07:50 | 显示全部楼层
不是要凑合着能用, 我选择了几个文件,它只返回一个(类型STRING).

TA的精华主题

TA的得分主题

发表于 2007-7-20 10:18 | 显示全部楼层

升级到2003啊...

以前对2003的HELP很感冒

怎么都是ONLINE HLEP,似乎没有本机的CHM...

想要找个整齐的索引都没有了,*_*

特意都要找齐2000或2002的CHM做记念

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 18:14 , Processed in 0.035406 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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