Excel 2010 Redim Preserve crash

Я как-то могу сбой Excel 2010, введя следующее в среду IDE в новой книге:

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 требует, чтобы вы были явным с 1-м параметром резервной копии 2D (поскольку вам не разрешено изменять 1-е измерение). Но это не смешно, когда штраф за простую синтаксическую ошибку - тяжелый сбой. Это ИТ-отдел с достаточно чистой средой (без установленных добавлений, пустая пустая панель проекта в среде IDE), а "redim v (, 1 to M)" тоже разбил мою соседнюю машину - так что это не только я.

Мне интересно, если это происходит с другими, и я отправляю его на всякий случай, если он спасет кого-то еще в те часы, которые я потратил впустую на восстановление моих книг до тех пор, пока я не зафиксировал ошибку.

Ответ 1

Авария происходит как из-за отсутствия первого измерения, так и, возможно, с большей точки зрения, бездействия в 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

Нижняя строка, ни один из кодов перед строками "БУМ" не смягчит падение. Ошибка компилятора, которую я бы понял, но VBA не кодируется для обработки

ReDim myVar(,x TO y)

Я использовал Office 2007.


Для ударов и усмешек я также пробовал этот код в следующих местах:

  • Доступ '97 (CRASH)
  • Visual Basic 5 IDE (CRASH)
  • ОСНОВНАЯ среда для OpenOffice Calc. (См. Ниже).

Это не сбой, и я получил следующие две ошибки компилятора: Сначала это: enter image description here

Затем это:

enter image description here