ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-7-11 00:35 | 显示全部楼层 |阅读模式
我设置了一个动态数组
dim arr()
然后将其传递给一个函数的形参
b = arr()   或者b = arr
之后应用IsMissing(b),就出现了Excel的崩溃!!
事实上即便不用函数传参的方式,仅仅在一个过程内,情况也一样:

sub test()
    dim arr()
    dim b as variant
    b = arr
    debug.print IsMissing(b)
end sub

同样导致程序的崩溃,没有任何报错直接崩溃,请问是什么原因??我的Excel版本是2007

TA的精华主题

TA的得分主题

发表于 2019-7-11 07:51 | 显示全部楼层
欢迎新朋友,建议上传附件,结合附件内容描述下需求

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-11 13:03 | 显示全部楼层
liulang0808 发表于 2019-7-11 07:51
欢迎新朋友,建议上传附件,结合附件内容描述下需求

不,这并不需要附件,我在帖子里面已经写了一段代码,不知道这段代码在您的Excel上是否正常运行?

TA的精华主题

TA的得分主题

发表于 2019-7-11 13:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sheffield 发表于 2019-7-11 13:03
不,这并不需要附件,我在帖子里面已经写了一段代码,不知道这段代码在您的Excel上是否正常运行?

如果仅仅这段代码的话,楼主查查IsMissing的帮助,看看这个函数具体怎么用吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-11 14:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liulang0808 发表于 2019-7-11 13:15
如果仅仅这段代码的话,楼主查查IsMissing的帮助,看看这个函数具体怎么用吧

你好,你是否运行了我说的代码?你能正常运行下面这段代码?

sub test1()
    dim arr(), var
    var = arr()
    test2 var
end sub

sub test2(optional a)
    if isMissing(a) then
        debug.print "你是否运行了我说的代码??"
    else
        debug.print  "无论如何Excel都会崩溃??"
    end if
end sub

TA的精华主题

TA的得分主题

发表于 2019-7-11 15:16 | 显示全部楼层
sheffield 发表于 2019-7-11 14:50
你好,你是否运行了我说的代码?你能正常运行下面这段代码?

sub test1()
  1. Sub test1()
  2.     Dim arr() As Integer, var
  3.     var = arr()
  4.     test2 var
  5. End Sub

  6. Sub test2(Optional a)
  7.     If IsMissing(a) Then
  8.         Debug.Print "你是否运行了我说的代码??"
  9.     Else
  10.         Debug.Print "无论如何Excel都会崩溃??"
  11.     End If
  12. End Sub
复制代码
说明
使用 IsMissing 函数来检测在调用一个程序时是否提供了可选 Variant 参数。如果对特定参数没有传递值过去,则 IsMissing 返回 True;否则返回 False。如果 IsMissing 对某个参数返回 True,则在其它代码中使用这个丢失的参数将产生一个用户自定义的错误。如果对 ParamArray 参数使用 IsMissing,则函数总是返回 False。为了检测空的 ParamArray,可试看一下[url=]数组[/url]的上界是否小于它的下界。
注意   IsMissing 对简单数据类型(例如 IntegerDouble)不起作用,因为与Variants不同,它们没有“丢失”标志位的前提。正由于此,对于可选参数类型,可以指定缺省值。如果调用过程时,参数被忽略,则该参数将具有该缺省值

TA的精华主题

TA的得分主题

发表于 2019-7-11 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
arr()都没初始化就赋值给别的变量?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-11 15:21 | 显示全部楼层
lujkhua 发表于 2019-7-11 15:16
说明
使用 IsMissing 函数来检测在调用一个程序时是否提供了可选 Variant 参数。如果对特定参数没有传递 ...

我知道这些,我的代码也符合IsMissing的要求——是variant的变量——Optional a,我关心的是,为何IsMissing在检测这个a的时候会导致Excel崩溃?另外是不是在你的Excel版本中这段代码正常运行?

TA的精华主题

TA的得分主题

发表于 2019-7-11 15:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sheffield 发表于 2019-7-11 15:21
我知道这些,我的代码也符合IsMissing的要求——是variant的变量——Optional a,我关心的是,为何IsMiss ...

你没看到有什么不同的地方吗?
Dim arr() As Integer
将数组声明一个具体类型就可以运行

TA的精华主题

TA的得分主题

发表于 2019-7-11 15:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我的Excel2016,也会崩溃。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 06:02 , Processed in 0.046275 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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