Размерность массива[ansistring]

Программирование на Visual Basic for Applications
valerynew
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 10.12.2004 (Пт) 21:10
Откуда: Novosibirsk

Размерность массива[ansistring]

Сообщение valerynew » 10.12.2004 (Пт) 21:28

У VBA размерность массива типа AnsiSting ограничена 256... Что можно придумать, если мне DDE-server должен вернуть 600 - 900 элементов?
Сейчас я вызываю DDE 4 - 5 раза в цикле...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.12.2004 (Сб) 4:55

В OLE SAFEARRAY размерность массива ограничена DWORD-ом, что применительно к VBA означает чуть больше 2 млрд. элементов...
Выбросить нафиг все книжки, где утверждается обратное...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

valerynew
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 10.12.2004 (Пт) 21:10
Откуда: Novosibirsk

Сообщение valerynew » 22.12.2004 (Ср) 20:47

Нехорошо сформулировал свой вопрос, извините.

Потребовалось загрузить в табличку Exel 1000 чисел из-под DDE-сервера. (В С всё это идёт безпроблемно, лень статанализ делать :) ).

Пишу код:
...
...
uzdata=dderquest(uzlink,uzitem)
'------------
.....

Итого:
uzdata - массив строк,ОК.
Индекс массива - типа byte!? (сервер возвращает около 1000 значений)

Это баг VBA?
Моя ошибка?
Что можно здесь придумать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.12.2004 (Ср) 21:46

А почему byte?
Откуда? Кто сказал? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

valerynew
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 10.12.2004 (Пт) 21:10
Откуда: Novosibirsk

Сообщение valerynew » 22.12.2004 (Ср) 22:10

Debug VBA - Local Window, пишет тип переменной, - Variant(256)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.12.2004 (Ср) 22:47

А :)
Ну дык ага :)

Смело индексируем нужными значениями и наблюдаем, как меняется Variant :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

valerynew
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 10.12.2004 (Пт) 21:10
Откуда: Novosibirsk

Сообщение valerynew » 22.12.2004 (Ср) 23:09

Чего менять-то? Out Range получишь..
Что сообразил, попробовал...
DLL внешний мне ни к чему(не интересно, так-то каждый может).

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.12.2004 (Чт) 0:11

Чуто поболе кода в студию...
Наряду с объявлениями переменных... и функций...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

valerynew
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 10.12.2004 (Пт) 21:10
Откуда: Novosibirsk

Сообщение valerynew » 02.01.2005 (Вс) 1:08

Тему можно прикрыть, оказывается всё это давно известно и является типовым, как мне объяснили, примером ограничений VBA.
Всем спасибо.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.01.2005 (Вс) 8:58

Всем пожалуйста, но мы тут как раз плюшками балуе... эээ... в смысле, раширяем возможности VB. Мож и придумали бы чё.
Я вот, к примеру, так и не понял, в чём суть проблемы.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

valerynew
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 10.12.2004 (Пт) 21:10
Откуда: Novosibirsk

Сообщение valerynew » 03.01.2005 (Пн) 0:15

GSerg писал(а):Я вот, к примеру, так и не понял, в чём суть проблемы.


Суть проблемы такова:
У Windows есть стандартный интерфейс обмена данными называемый DDE.
MS Office с ним знаком, но как-то странно.
Вот что случилось у меня.
Неоднократно писались на CBuilder разные приложения под некий DDE-сервер.
При переносе простейшего(табличка Exel с цифрами плюс красивые заголовки) на VBA возникла проблема:
вместо массива 1000 значений оператор VBA

sAsvariant=DdeRequest(..)

возвращает только 256. :roll:
В соглашениях стандарта DDE таких ограничений нет.

Говорят, поскольку VBA не есть ООП и перегрузка оператороа присвоения невозможна, 'забитая' MS размерность возвращаемого массива не может быть изменена, без перекомпиляции Office :D

Рекомендумый способ решения проблемы:
1. если тебе попался баг, напиши к нему ещё 5 шт. :P
2. Написать внешнюю функцию, dll например и вызови, VBA это умеет.

PS: если кто хочет проверить сам, где-то есть ссылка, качнуть DDE сервер для экспериментов..


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59

    TopList  
cron