Как в Excel передать больше 65535 элементов?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Как в Excel передать больше 65535 элементов?

Сообщение Dimon111 » 31.01.2008 (Чт) 18:46

Складывается впечатление, что существует ограничение на колличество элементов, передаваемых за один раз из массива VB в Excel.

Так, например

Код: Выделить всё
.Range("A2").Resize(UBound(BufferIZM)).Value = iXLApp.Transpose(BufferIZM)


если одномерный массив BufferIZM (объявлен как Dim BufferIZM() As Single) содержит 65536 элементов я получаю сообщение: "Run-Time Error 13: Type Mismatch".

Или если
Код: Выделить всё
With .Range("A2:B2").Resize(iCount)


iCount имеет значение 65536, то я получаю сообщение: "Run-Time Error 1004: Application defined or object defined error".

Как обойти это ограничение, если оно действительно существует?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 31.01.2008 (Чт) 19:50

Оно действительно существует. Диапазон расширен до 1 048 576 строк в Excel 2007. (и 16384 столбцов, если интересно :) )

[half-offtop]А зачем такие масштабные списки передавать? Может, можно проще?
Сразу вспомнитается цитата из какого-то руководства: "Вы, конечно, можете объявить массив размерности 32. Иногда это даже имеет смысл. Но в большинстве случаев что-то не так либо с вашей программой, либо с вами."[/half-offtop]
Моду создают модоки, а распространяют модозвоны.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 31.01.2008 (Чт) 20:43

Проще нельзя. Программа предназначена для работы совместно с мультиметром APPA305. Работа с ним по времени не ограничена. Будет очень неудобно, если измерения за 7 часов работы пропадут из - за таких ограничений. Впрочем, я подстраховался и вывел еще данные в txt формате. До этого формата Билл Гей -тс! еще не добрался.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 31.01.2008 (Чт) 21:40

Ну, можно было применить еще 5 решений как минимум:
1) Перейти на Excel 2007. Там эта проблема вряд ли проявится.
2) Заюзать столбцы. Это дает 65536 * 256 = 16777216 ячеек. А в Excel 2007 число ячеек и вовсе умопомрачительно.
3) Отсекать старую информацию (если дата за двадцать четыре часа до текущего времени, то ...)
4) Задействовать дополнительные листы при переполнении уже существующих.
5) Использовать базу данных. В принципе, подошел бы Access. У него (в теории) таких ограничений нету. И в Excel можно экспортировать. И сводная таблица+сводная диаграмма есть.

Вопрос только в том, насколько быстрЫ и эффективны будут такие решения.
Моду создают модоки, а распространяют модозвоны.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.02.2008 (Пт) 10:03

Единственный разумный выход - 5. И это будет по-любому быстрее, чем такое вот насилие над экселем. Кстати, 2007й эксель гораздо более тормозной, чем предыдущие версии.
Лучший способ понять что-то самому — объяснить это другому.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Сообщение Dimon111 » 01.02.2008 (Пт) 11:11

Не нравятся мне навороченные продукты от Билла Гей - ТСя.

Насчет 5 пункта будем посмотреть... Спасибо за ответы.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 20

    TopList