Определение размера динамического массива

Программирование на Visual Basic for Applications
Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Определение размера динамического массива

Сообщение Евгений Д. » 18.10.2005 (Вт) 12:44

Коллеги, никак не могу найти элегантный способ определения размера динамического массива, точнее его нулевой длины. Например:

Код: Выделить всё
Option Base 1

Function Test( MyArray() )

  Rows = UBound(MyArray)

  ...

End Function


При выполнении строчки Rows = UBound(MyArray) может выскочить ссобщение об ошибке, если до вызова функции Test размер массива MyArray не был переопределен по Redim.

Использование IsEmpty(MyArray) не помогает.

Пока решаю эту проблему, перехватывая ошибку. А нет ли более простого решения?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.10.2005 (Вт) 12:53

На сайт, читать статью про SAFE_ARRAY.
Lasciate ogni speranza, voi ch'entrate.

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 18.10.2005 (Вт) 13:43

Спасибо. Ведь читал когда-то... Надо чинить статическую память [img]:D[/img].

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Re: Определение размера динамического массива

Сообщение brigval » 18.10.2005 (Вт) 15:03

Евгений Д. писал(а): Пока решаю эту проблему, перехватывая ошибку. А нет ли более простого решения?


VBA.IsArray не пробовали?
brigval

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.10.2005 (Вт) 15:05

Он подходит для Variant, а не для массивов.
Lasciate ogni speranza, voi ch'entrate.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 18.10.2005 (Вт) 15:19

alibek писал(а):Он подходит для Variant, а не для массивов.


Действительно.

Вот вариант. Я так иногда делаю.

Можно принудительно переопределять массив до вызова функции и присваивать какое-либо значение. А внутри функции делать проверку на это значение. Тогда ошибка не будет возникать.
brigval

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.10.2005 (Вт) 15:21

Зачем? Рабочую функцию уже написал GSerg, почему бы не использовать ее?
Lasciate ogni speranza, voi ch'entrate.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 18.10.2005 (Вт) 15:27

alibek писал(а):Зачем? Рабочую функцию уже написал GSerg, почему бы не использовать ее?


Я дал свой вариант ухода от ошибки. Если ваша функция лучше, пусть использует ее. Если вы ее приведете здесь, я тоже взгляну.
brigval

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.10.2005 (Вт) 15:36

Lasciate ogni speranza, voi ch'entrate.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 18.10.2005 (Вт) 15:54

alibek писал(а):http://www.vbstreets.ru/VB/Articles/65977.aspx

Довольно мудренно для начинающего...
Может быть потом пригодится. Спасибо.
brigval


Вернуться в VBA

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

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

    TopList