Excel 2010 Redim Preserve崩溃

tpa*_*ale 12 excel vba excel-vba

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

private sub foo
    redim v(,1 to 3)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

ray*_*ray 3

崩溃是由于第一个维度的遗漏(或者更好的措辞,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
Run Code Online (Sandbox Code Playgroud)

最重要的是,“BOOM”行之前的任何代码都不会缓冲下跌。我可以理解编译器错误,但 VBA 没有编码来处理

ReDim myVar(,x TO y)
Run Code Online (Sandbox Code Playgroud)

我用的是Office 2007。


为了踢球和笑,我还在以下地方尝试了这段代码:

  1. 访问'97(崩溃)
  2. Visual Basic 5 IDE(崩溃)
  3. OpenOffice Calc 的基本环境。(见下文)

它没有崩溃,我收到以下两个编译器错误:首先是: 在此输入图像描述

然后这个:

在此输入图像描述