VBA错误信息:数组长度固定或临时被锁定(错误 10)

发布: 2009-1-31 08:55  作者: webmaster  查看: 888次 共有0条评论

:数组长度固定或临时被锁定(错误 10)

并非所有数组都可重设大小。即使数组声明成动态,或者数组是在Variant变量中,也会被临时锁定。此错误有以下的原因和解决方法:

  • 使用ReDim来改变固定大小数组的元素数。例如,在下列的代码中,在NextOne过程中SomeArr接收了固定大小的数组FixedArr,然后试图调整SomeArr的大小:
    Sub FirstOne
        Dim FixedArr(25) As Integer    '创建一个固定大小的数组并NextOne FixedArr()            '将之传给其它过程。End SubSub NextOne(SomeArr() As Integer)ReDim SomeArr(35)        '发生错误10. . .End Sub

    将数组用ReDim(如果是在过程内声明数组)声明为动态的而非固定大小,或在声明时不指定元素数(如果是在模块级别中声明数组 )。

  • 对模块层次动态数组,要重新确定大小,而某一个元素已经作为参数传给了过程。例如,在下列的代码中,ModArray是模块层次动态数组,却将其第 56 个元素以按引用传给Test过程:
    Dim ModArray () As Integer    '创建一个模块层次动态数组。. . .Sub AliasError()ReDim ModArray (1 To 73) As IntegerTest ModArray (45)    '传模块层次动态数组的元素'Test过程。End SubSub Test(SomeInt As Integer)ReDim ModArray (1 To 40) As Integer  '错误在这里发生。End Sub

    此例并不需要传递模块层次动态数组元素,因为在模块中所有过程都可看到它。然而,如果传递元素,在过程内引用参数,数组会被锁定以避免内存的配置释放,因此,当过程返回时,会导致不能预测的情况出现。

  • 赋一个值给包含数组的Variant变量,但Variant当前被锁定。例如,如果代码使用了 Each...Next循环,对包含数组的 variant 执行操作的话,在进入循环后数组将会被锁定,在循环退出后释放:
    SomeArray = Array(9,8,7,6,5,4,3,2,1)
    
    For Each X In SomeArray
        SomeArray = 301    '因为数组锁定导致错误。Next X

    使用For...Next代替For Each...Next循环来执行迭代。当数组是For Each...Next循环的对象时,可以读入数组,但不能写入。

详细信息,可选取有问题的项目,并按下 F1 (在Windows中)或HELP(在Macintosh中)键。

相关阅读
大家对 VBA错误信息:数组长度固定或临时被锁定(错误 10) 的评论
最新PPT教程
最新评论
PPT问答