通过在全新的工作簿中输入以下内容,我能以某种方式崩溃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)”也崩溃了我邻居的机器 - 所以这不仅仅是我。
我想知道这种行为是否会与其他人一起发生,并且发布它是为了防止其他人浪费时间重建我的工作簿,直到我确定错误为止。
答案 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。
对于踢腿和笑脸,我也在以下地方尝试过这段代码:
它没有崩溃,我收到了以下两个编译器错误: 首先这个:
然后这个: