VBA 在循环里多次redim动态数组一定注意,需要加preserve

本文通过两个例子讲解了VBA中动态数组的使用,特别是`ReDim Preserve`关键字的重要性。错误例子中,未使用`Preserve`导致每次重新分配数组大小时,先前数据丢失。而在正确例子中,`ReDim Preserve`确保了数组大小改变时旧数据得以保留。强调在循环中动态调整数组大小时,必须使用`Preserve`且注意数组不能变小,以防止数据丢失。
摘要由CSDN通过智能技术生成

1  错误例子

    For i = 1 To count_new
        Randomize
        p2 = Int(1 + 10 * Rnd)
        Debug.Print "第" & i & "次随到的p2=" & p2
        
        ReDim  arr7(1 To i)                        '这里没写preserve 害的好惨!!
        arr7(i) = p2
        Debug.Print "arr7(" & i & ")=" & arr7(i)
    Next
  • 这里如果不加preserve
  • 从现在赋值时看,每个arr7的内容都会是对的
  • 但是每次赋值的时候,之前的内容全部都清空了
  • 会导致 arr7() 这个数值最后只有1个元素是有值的,前面都是空元素
  • 这个还不容易发现
  • 但这个循环结束后,后面 再加1个循环遍历数值就发现了

2 正确例子

    For i = 1 To count_new
        Randomize
        p2 = Int(1 + 10 * Rnd)
        Debug.Print "第" & i & "次随到的p2=" & p2
        
        ReDim Preserve arr7(1 To i)                
        arr7(i) = p2
        Debug.Print "arr7(" & i & ")=" & arr7(i)
    Next

3 重点语句:

  • 我这里省略了,函数/过程开始,先 dim arr7() 如果不定义,arr7()会被认为是 函数而不是数组
  • 动态数组 dim arr7()  每次使用前都要 先redim()
  • 可以在循环里,多次,重复 redim (1 to i ) 但是这样会丢失之前得数据,只保留了数组arr7()最后一个数据。
  • 可以在循环里,多次,重复 redim preserve  (1 to i ) ,这个要注意,如果是preserve里 ,就得保证,arr7()  数组不能变小,否则可能之前得数据就无法 preserve了。
  • 所以在循环里,动态,多次重复redim() 数组时,都要记得加preserve!!! 同时注意数组得不能变小才行!!!
  • ReDim Preserve arr7(1 To i)     


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值