0

我对数组有一些麻烦。

我有标准模块,其中包含一些子和私有变量。当通过它调用此模块时,userform_initialize它会执行一些过程,然后它应该存储数组变量并等到单击按钮执行另一个过程。问题是当我调用其他过程时,这个数组变量不保存其元素。简化的例子是这样的:

Private exp2() as double 'declaration of module array variable

Private sub1()

//'some code which fills array exp2()

msgbox exp2(x) '- this message box shows correct information stored in variable exp2(x)
sub2
End sub

Private sub2()
Redim preserve exp2(0 to x)
msgbox exp2(x) - this message shows 0
End sub

请记住,这不完全是我的程序流程。重要的是存储数组变量 exp2() 供以后使用。

4

3 回答 3

0

好吧,这对我来说真的很愚蠢。我有双重声明数组 exp2() 一个在模块级别,一个在 sub1 级别。问题解决了:)感谢大家提供一些建议

于 2019-08-22T06:42:03.033 回答
0

你想达到这样的目标吗?

  • 在这里,您可以访问其他 Sub 中最初分配的值。

Private exp2() As Double
Private Sub hh()

ReDim exp2(0 To 1)

    exp2(0) = 1    
    MsgBox exp2(0) ' Prints 1

    hh2

End Sub

Private Sub hh2()
ReDim Preserve exp2(0 To 2)
MsgBox exp2(0) ' also prints 1
End Sub

演示:

在此处输入图像描述

于 2019-08-21T13:31:33.057 回答
0

我认为答案实际上取决于您的“//'填充数组 exp2()”部分的代码中发生了什么。我对此进行了如下测试,效果很好:

Private exp2() As Double 'declaration of module array variable
Private Sub sub1()
ReDim exp2(1 To 2)
exp2(1) = 2
exp2(2) = 4
MsgBox exp2(2) '- this message box shows correct information stored in variable exp2(x)
sub2
End Sub
Private Sub sub2()
ReDim Preserve exp2(1 To 3)
MsgBox exp2(2)
End Sub

因此,如果您从索引 1 开始对数组进行初始尺寸标注,则重新标注尺寸会引发错误。但是,如果您只是将“行”添加到数组中,超出了最初的范围,那么它看起来很有效。当我尝试这个时,它失败了:

ReDim Preserve exp2(0 To 2)
MsgBox exp2(2)
于 2019-08-21T13:36:38.060 回答