![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Уважаемые форумчане!
Столкнулся с проблемой, которую не могу объяснить. Для примера, во вложении на листе 1 есть таблица из 300 строк и 26 столбцов. В макросе "test" объявляется и заполняется массив, размерностью 26 х 1. Каждый элемент массива представляет собой сцепленные через пробел 300 значений соответствующего столбца, т.е. длинное строковое значение. (повторюсь, что это для примера. В реальном случае, массив формируется гораздо сложнее, но суть та же). Так вот, требуется вставить элементы полученного массива на лист 2 в столбец "A". В коде макроса два варианта. Если организовать цикл по всем элементам массива и вставлять в ячейки столбца по одному значению, то все работает (вариант 2 в коде). А если попытаться просто вставить массив в требуемый диапазон (вариант 1, в коде закомментирован), то получим ошибку. При чем, если убавлять количество строк (длину элементов массива), то наступит момент, когда ошибка исчезнет. Массив формируется. Данные в ячейки вставляются. Вопрос: в чем (где) ограничение?
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
SAS888, это известная ошибка EXCEL 2003
http://support.microsoft.com/kb/818808/en-us Она возникает при попытке присвоить рангу массив с длиной строки (элемента массива) больше 911 символов Последний раз редактировалось Aent; 06.08.2009 в 13:47. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Спасибо за информацию. Был я по этой ссылке. Но что-то здесь не так.
В приведенном выше примере, при формировании массива, ошибки не возникает. И если просто перебором элементов массива вставлять их в ячейки листа (см. вариант с циклом For...Next в коде макроса), то ошибки также нет. Т.е. ошибка появляется в момент вставки массива в диапазон ячеек рабочего листа. Для примера, попробуйте выполнить код: Код:
Но если в коде вместо цикла вывода элементов массива в ячейки использовать [A1:A5].Value = a, то будет ошибка. Я делаю вывод, что ограничение на элемент массива в 911 символов не есть правильно.
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 17.07.2009
Сообщений: 1,088
|
![]()
Может дело в свободной памяти? Либо версия Excel.
У меня 2007 и все работатет на УРА. 2003 нет, так что проверить не на чем...
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
SAS888, это именно та ошибка. Она возникает при присваивании
массива а не элемента массива. Код:
Код:
Последний раз редактировалось Aent; 06.08.2009 в 16:17. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]() Цитата:
Т.е. в подобных случаях, если существует возможность получить массив с такими элементами, то, для надежности, следует, наверное, отключить обработку ошибок, попробовать вставить массив в диапазон ячеек, и если получаем ошибку, то тогда вставляем не массив, а его элементы в цикле. Так?
Чем шире угол зрения, тем он тупее.
|
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
По всей видимости именно так и надо поступать.
Серьёзные проблемы возникают при использовании ADO. Скажем для метода CopyFromRecordset. Там вылазит та же самая ошибка. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что-то непонятное.. | Busine2009 | Microsoft Office Word | 4 | 10.07.2009 21:44 |
Непонятное задание. | Dmitry81 | Помощь студентам | 11 | 11.01.2009 16:27 |
Непонятное задание. | Dmitry81 | Microsoft Office Excel | 2 | 10.01.2009 12:38 |
Непонятное условие | SunKnight | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 29.11.2008 23:01 |