Есть файл со следующим кодом:
2 функции, которые делают одно и то же - возвращают двумерный массив (в первом столбце - значения ячеек, во втором - примечания к тем же ячейкам)
При запуске первой функции (которую я написал изначально) - Excel 2007 и 2010 закрываются без каких-либо уведомлений, а Excel 2003 зависает.
Что самое интересное: если в Excel 2003 во время выполнения первого кода нажать Ctrl + pause (остановить макрос), и продолжить выполнение в пошаговом режиме (нажимая F8), мы увидим, как Excel сходит с ума:
выполнение не всегда идет не как ожидается, а происходит перескакивание с одной строки кода на другую, в хаотичном порядке.
С точки зрения синтаксиса VBA, обе функции написаны верно.
Регулярно пишу подобные по методам работы функции - никогда проблем не было.
В чем причина столь странного поведения Excel?
Код |
---|
' sh - кодовое имя листа Sub test1() a = FIOarray1 ' Excel 2007 и 2010 молча закрываются, Excel 2003 зависает End Sub Sub test2() a = FIOarray2 ' все нормально работает End Sub Function FIOarray1() As Variant ' Excel глючит ' возвращает двумерный массив с фамилиями и примечаниями к ним Dim cell As Range, n& FIOarray1 = FIOrange.Resize(, 2).Value For Each cell In FIOrange.Cells n = n + 1: FIOarray1(n, 2) = cell.NoteText Next cell End Function Function FIOarray2() As Variant ' а вот так - работает ' возвращает двумерный массив с фамилиями и примечаниями к ним Dim cell As Range, n&: arr = FIOrange.Resize(, 2).Value For Each cell In FIOrange.Cells n = n + 1: arr(n, 2) = cell.NoteText Next cell FIOarray2 = arr End Function Function FIOrange() As Range Set FIOrange = sh.Range(sh.[b5], sh.Range("b" & sh.Rows.Count).End(xlUp)) End F unction |
2 функции, которые делают одно и то же - возвращают двумерный массив (в первом столбце - значения ячеек, во втором - примечания к тем же ячейкам)
При запуске первой функции (которую я написал изначально) - Excel 2007 и 2010 закрываются без каких-либо уведомлений, а Excel 2003 зависает.
Что самое интересное: если в Excel 2003 во время выполнения первого кода нажать Ctrl + pause (остановить макрос), и продолжить выполнение в пошаговом режиме (нажимая F8), мы увидим, как Excel сходит с ума:
выполнение не всегда идет не как ожидается, а происходит перескакивание с одной строки кода на другую, в хаотичном порядке.
С точки зрения синтаксиса VBA, обе функции написаны верно.
Регулярно пишу подобные по методам работы функции - никогда проблем не было.
В чем причина столь странного поведения Excel?