Excel 2010 Redim Preserve崩溃

时间:2012-01-19 18:06:59

标签: vba excel-vba excel

通过在全新的工作簿中输入以下内容,我能以某种方式崩溃Excel 2010:

private sub foo
    redim v(,1 to 3)

好的,你不太可能打字......但这就是真正发生的事情:

private sub foo
    dim v(1 to N, 1 to M)
    ...
    M = New_Value
    redim preserve v(,1 to M)  ' seemed reasonable ... then CRASH !!!

有趣的是,VBA要求你明确使用2D redim保留的第一个参数(因为你不允许改变第一维)。但是,如果对简单语法错误的惩罚是一次严重的崩溃,那就不好笑了。这是一个IT部门,环境相当干净(没有安装插件,在IDE中启动空项目窗格),“redim v(,1到M)”也崩溃了我邻居的机器 - 所以这不仅仅是我。

我想知道这种行为是否会与其他人一起发生,并且发布它是为了防止其他人浪费时间重建我的工作簿,直到我确定错误为止。

1 个答案:

答案 0 :(得分:2)

崩溃发生在第一维的遗漏,或者更好的措辞, nLastDimension - 1 的遗漏,以及在以下维度中使用TO关键字。

我拿了你的小样本,并试图让它不崩溃:P

Option Explicit 'Just wanted to make the Interpreter more picky

Private Sub test()
    'Go through some basic declaration
    Dim v() As Variant
    Dim M As Integer
    Dim New_Value As Integer

    ReDim v(2, 2) 'No Problem
    ReDim Preserve v(1, 1 To M) ' No Problem
    ReDim Preserve v(1 To M) ' No Problem
    ReDim Preserve v(,400) 'Compile Error

    'Crash on this
    'ReDim Preserve v(,1 To M) 'BOOM!!!
    'and this:
    'ReDim Preserve v(,1 To 2) 'BOOM!!!
    'and this:
   'ReDim Preserve v(1 to 5,,1 To 2) 'BOOM!!!


End Sub

底线,“BOOM”线之前的代码都没有缓冲下降。我理解的编译器错误,但VBA未编码处理

ReDim myVar(,x TO y)

我使用的是Office 2007。


对于踢腿和笑脸,我也在以下地方尝试过这段代码:

  1. 访问'97(CRASH)
  2. Visual Basic 5 IDE(CRASH)
  3. OpenOffice Calc的BASIC环境。 (见下文)
  4. 它没有崩溃,我收到了以下两个编译器错误: 首先这个: enter image description here

    然后这个:

    enter image description here