Сбой Excel 2010 Redim Preserve - PullRequest
       8

Сбой Excel 2010 Redim Preserve

12 голосов
/ 19 января 2012

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

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

1 Ответ

2 голосов
/ 20 января 2012

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

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

Тогда это:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...