Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2537|回复: 4

动态数组,未重新定义,程序进行释放,程序能正常运行吗

[复制链接]
发表于 2019-11-18 11:05 | 显示全部楼层 |阅读模式
各位网友
对于动态数组,有时根据条件未重新定义,程序运行后还释放数组,程序能否正常运行,有无影响
例如
sub xx()
dim  yy()
.......
if ...then
  x=x+1
Preserve Redim yy(1 to x)
……
end if
erase yy

end sub
条件未成立时,程序未对数组重新定义,但后面也进行了释放数组
发表于 2019-11-18 11:21 来自手机 | 显示全部楼层
你为啥不测试一下呢,怕电脑爆炸?

评分

参与人数 1学分 +2 收起 理由
sub麻辣君 + 2 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

发表于 2019-11-18 11:35 | 显示全部楼层
Sub xx()
    Dim yy()
    '    .......


    If 1 Then
        x = x + 1
        ReDim Preserve yy(1 To x)
        '    ……
        Erase yy
    End If

End Sub




Preserve 好像进入时的开门动作
Erase 好像出去时的关门动作
而这2个动作,都只在满足条件后才做



回复

使用道具 举报

发表于 2019-11-18 11:50 | 显示全部楼层
万一实际需求非要把释放放在外面,就判断下是否重新声明过,比如可以


Sub test2()
    Dim x, yy()

    If 1 Then
        x = x + 1
        ReDim Preserve yy(1 To x)
    End If

    '如果执行过 ReDim Preserve ,就释放yy
    If UBound(yy) = x Then Erase yy

End Sub

评分

参与人数 1学分 +2 收起 理由
向前650809 + 2 学习

查看全部评分

回复

使用道具 举报

发表于 2019-11-18 13:49 | 显示全部楼层
  1. Sub Test()
  2.     Dim i%, A(), B()
  3.    
  4.     On Error Resume Next
  5.    
  6.     Erase A
  7.     If Err.Number = 0 Then
  8.         MsgBox "Erase: Safe!"
  9.     Else
  10.         MsgBox "Erase: Boom!"
  11.     End If
  12.    
  13.     Err.Clear
  14.     i = 10
  15.     ReDim Preserve A(1 To i)
  16.     If Err.Number = 0 Then
  17.         MsgBox "Redim Pre: Safe!"
  18.     Else
  19.         MsgBox "Redim Pre: Boom!"
  20.     End If
  21.    
  22.     Err.Clear
  23.     i = UBound(A)
  24.     If Err.Number = 0 Then
  25.         MsgBox "Ubound After Redim: Safe!" & vbCrLf & "i = " & i
  26.     Else
  27.         MsgBox "Ubound After Redim: Boom!"
  28.     End If
  29.    
  30.     Err.Clear
  31.     Erase A
  32.     i = UBound(A)
  33.     If Err.Number = 0 Then
  34.         MsgBox "Ubound After Erase: Safe!" & vbCrLf & "i = " & i
  35.     Else
  36.         MsgBox "Ubound After Erase: Boom!"
  37.     End If
  38.    
  39.     Err.Clear
  40.     i = UBound(B)
  41.     If Err.Number = 0 Then
  42.         MsgBox "Ubound New Array: Safe!" & vbCrLf & "i = " & i
  43.     Else
  44.         MsgBox "Ubound New Array: Boom!"
  45.     End If
  46. End Sub
复制代码

评分

参与人数 1学分 +2 收起 理由
向前650809 + 2 学习

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 19:01 , Processed in 0.602862 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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