ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 一个导致Excel崩溃的VBA Bug??

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-7-12 14:41 | 显示全部楼层
ismissing检测的是形参有没有被赋值,定义数组时没有任何限定就意味着没有形参,ismissing自然无法返回该返回的结果(true or false)。至于excel崩溃,你觉得这个问题值得深究吗,如果觉得应该深究那么请反馈Microsoft Support,也许就帮微软完善了已万年无动静的VBA。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-12 14:59 | 显示全部楼层
z_colin 发表于 2019-7-12 14:41
ismissing检测的是形参有没有被赋值,定义数组时没有任何限定就意味着没有形参,ismissing自然无法返回该返 ...

事实上没有任何限定的数组(a)可以赋值给待IsMissing检测的形参,一定会返回True或False;但a赋值到另外的变量(b)之后,b就不能再赋值给待IsMissing检测的形参了。不会返回True或False,而是Excel挂了。
我觉得这令人不解,所以发帖寻找原因咯。vb已经公告不维护了,何况vba。如果确实是bug,就当大家乐一乐吧。但还是希望能找到一个理由。不过绕道解决此问题的办法也有,not IsEmpty 配合typename,再调用一个检查数组维数的函数,就可以做到了

TA的精华主题

TA的得分主题

发表于 2019-7-12 15:21 | 显示全部楼层
sheffield 发表于 2019-7-12 14:59
事实上没有任何限定的数组(a)可以赋值给待IsMissing检测的形参,一定会返回True或False;但a赋值到另外 ...

“我要的是另外一个需求,用户把任何一个变量嵌套到另一个数组或字典中,我都能识别是什么类型的变量。我需要检测这个数组或字典,我的最终目的是构造另外一个debug函数,打印输出一个数组或字典的内容。”

可能是我理解有误, 你的代码 dim arr() then b =arr是把任意类型数组嵌套到变量吧,什么情况下需要这么写代码呢? 单纯上述需求,楼主觉得自己的方法是绕路,不大明白啥时候先确定类型再定义成绕路了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-12 15:32 | 显示全部楼层
chenjx80 发表于 2019-7-12 13:45
日志名称:          Application
来源:            Application Error
日期:            2019/7/12 8:5 ...

谢谢你的回复,提供了异常代码: 0xc0000005。这是我期望的。需要注意的是,这个不初始化的数组,如果没有再次赋值到另一变量(var),一切都是正常的。赋值之后,var的typename()、vartype()、isarray()、iserror()等等等是正常的,除了ismissing(),或者还有别的函数有问题,暂时没发现。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-12 15:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
z_colin 发表于 2019-7-12 15:21
“我要的是另外一个需求,用户把任何一个变量嵌套到另一个数组或字典中,我都能识别是什么类型的变量。我 ...

我在做一个框架,要考虑所有的可能性,我无法保证谁用了我的函数,他们必须去确定类型。至少我能给他们抛出一个异常,而不是直接让程序崩溃。明白了吧。

TA的精华主题

TA的得分主题

发表于 2019-7-13 20:21 来自手机 | 显示全部楼层
其实,这是个代码规范的问题。variant是个筐,什么都能往里装。但是你给这个筐装了一个null的鸡蛋,那就不对了。当然,微软也是个实诚人,它以为装到筐里面的一定都是实体,所以出现内存访问冲突导致Excel crash也是很正常的。

要想深究这个问题,你可以研究一下variant类型的数据在内存中的结构。

TA的精华主题

TA的得分主题

发表于 2019-7-13 21:26 | 显示全部楼层
数组检测,请使用 新的函数,用错误处理来判断.

TA的精华主题

TA的得分主题

发表于 2020-9-17 08:34 | 显示全部楼层
哈哈哈,你这代码我找到了别的用处,我给我的VBA设置了一个模板,如果超过有效期就运行你这个代码工作表就不能用了,哈哈哈

TA的精华主题

TA的得分主题

发表于 2020-9-17 08:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
laynet 发表于 2020-9-17 08:34
哈哈哈,你这代码我找到了别的用处,我给我的VBA设置了一个模板,如果超过有效期就运行你这个代码工作表就不能 ...

你真是个小机灵鬼

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-11-20 23:48 | 显示全部楼层
laynet 发表于 2020-9-17 08:34
哈哈哈,你这代码我找到了别的用处,我给我的VBA设置了一个模板,如果超过有效期就运行你这个代码工作表就不能 ...

楼主表示:请别这么牛B
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 05:26 , Processed in 0.040343 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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