Есть файл со следующим кодом:
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?