我有一个以3个对象值开头的全局数组变量g()。 然后,我调用一个子项,该子项使用g中的一项作为输入,并且需要在g中创建其他项,并更新提供的项。
类似的东西
声明:
公共g()作为分支
初始化:
ReDim g(1到3)
设置g(1)= br1
设置g(2)= br2
设置g(3)= br3
子程序的代码调用
致电chg(g(2))
Sub
公共Sub chg(ByRef br作为分支)
r = UBound(g)
ReDim g(1至r + 2)
...(其余代码)
结束
Redim语句上的代码错误,错误文本为“此数组是固定的或临时锁定的”。
为什么我不能更改此子数组的大小?有什么不同?
答案 0 :(得分:3)
从MSDN文档中:
您试图重新定义模块级动态数组,其中一个 元素已作为参数传递给过程。例如,在 在下面的代码中,ModArray是动态的模块级数组,其 引用测试程序传递了第四十五个元素。
在此无需传递模块级数组的元素 情况,因为它在模块中的所有过程中都是可见的。然而, 如果传递了一个元素,则该数组将被锁定以防止释放 该过程中参考参数的内存不足,导致 该过程返回时出现不可预测的行为。
Dim ModArray() As Integer ' Create a module-level dynamic array.
Sub AliasError()
ReDim ModArray(1 To 73) As Integer
Test ModArray(45) ' Pass an element of the module-level array to the Test procedure.
End Sub
Sub Test(SomeInt As Integer)
ReDim ModArray (1 To 40) As Integer ' Error occurs here.
End Sub
一个想法是传递数组的索引,而不是对象本身。