Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109

Как отловить неинициализованный массив

26.10.2009, 15:12. Показов 3078. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем, возникла такая ситуация, по ссылке в процедуру передается некий массив array() as Integer
Мне нужно отловить 2 варианта:
1. Массив проинициализирован и содержит некие данные
2. Массив непроинициализован - соответсвенно его нужно проинициализировать и т.д.

Как это можно реализовать на VBA?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2009, 15:12
Ответы с готовыми решениями:

Как остановить ролик из основной сцены, и как отловить окончание ролика?
в ролике я могу прописать stop() но я хочу что б весь код был только на основной сцене по этому подскажите как остановить ролик после его...

Как отловить событие снятия галочки как во внутренних Checkbox компонента
Есть такой составной компонент,предок которому TREEVIEW,надо обработать события снятия галочки как во внутренних Checkbox так и во...

Как написать свой Shift? ( или как отловить клавиши )
И снова Здравствуйте!) Уже 3-й день сижу над Клавиатурным хуком ) KeyboardHook И никак не могу понять как же отловить Shift (Шифт) ? ...

9
 Аватар для Toxa33rus
3924 / 925 / 125
Регистрация: 16.04.2009
Сообщений: 1,977
26.10.2009, 16:34
Visual Basic
1
2
3
4
5
6
Function IsAllocated(a As Variant) As Boolean
    IsAllocated = False
    On Error GoTo notallocated
    If LBound(a) <= UBound(a) Then IsAllocated = True
notallocated:
End Function
2
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109
26.10.2009, 19:17  [ТС]
Toxa33rus, спасибо, в целом, мысль понятна, мы сравниваем нижнюю границу с верхней
Цитата Сообщение от Toxa33rus Посмотреть сообщение
On Error GoTo notallocated
Какая ошибка может здесь возникнуть??? У неинициализированного стандарнтные границы(0,0)????
0
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
26.10.2009, 20:27
Лучший ответ Сообщение было отмечено как решение

Решение

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

А теперь серьёзный вариант, Toxa33rus такие очень любит.
Visual Basic
1
2
3
4
5
6
7
8
9
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
 
Sub mArr(arr() As Integer)
If SafeArrayGetDim(arr) = 0 Then
'массив не инициализирован
Else
'массив инициализирован
End If
End Sub
И вот ещё сморите какая фича прикольная есть, не требует никаких объявлений:
Visual Basic
1
2
3
4
5
6
7
Sub mArr(arr() As Integer)
If (Not Not arr) = 0 Then
'массив не инициализирован
Else
'массив инициализирован
End If
End Sub
3
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109
27.10.2009, 00:42  [ТС]
Abu, не очень бы хотелось использовать стороннюю библиотеку.

Abu, А как работает 2, мне совершенно непонятно

Цитата Сообщение от Abu Посмотреть сообщение
If (Not Not arr) = 0
Не могли бы вы объяснить эту конструкцию???
0
 Аватар для Toxa33rus
3924 / 925 / 125
Регистрация: 16.04.2009
Сообщений: 1,977
27.10.2009, 12:07
Цитата Сообщение от Chipnddail Посмотреть сообщение
Какая ошибка может здесь возникнуть??? У неинициализированного стандарнтные границы(0,0)????
Error 9. Subscript out of range. У неинициализированного границ никаких нету отсюда и ошибка.
0
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109
27.10.2009, 13:55  [ТС]
Toxa33rus, Понятно, я подозревал.....
0
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
28.10.2009, 01:44
Цитата Сообщение от Chipnddail Посмотреть сообщение
А как работает 2, мне совершенно непонятно
мне тоже, поэтому объяснить не смогу. Я вообще не понимаю что и как в vb работает. Предлагаю отгуглить, или просто повнимательнее посмотреть на работу оператора Not. Например посмотреть как он вообще работает с массивами.

P.S. Если найдёте вразумительное описание, то я тока спасиба скажу.
0
 Аватар для Toxa33rus
3924 / 925 / 125
Регистрация: 16.04.2009
Сообщений: 1,977
28.10.2009, 19:17
Цитата Сообщение от Abu Посмотреть сообщение
А как работает 2, мне совершенно непонятно
Я в отладке понаблюдал и пришел к такому выводу (не факт что к правильному) : оператор Not инвертирует все биты переменной (всего-навсего), неинициализированный массив есть переменная на подобии Null (а может и эквивалентна ей),
Not Not 0 = 0 тут очевидно, а вот если массив инициализирован то начинается самое интересное: массив это простая переменная структурированная особым образом в памяти, а значит это в любом случае набор бит вот он и выводится. Например такие: 2096328, 2096088.
Правда я заметил еще интересную штуку: если объявить массив и назначить ему размер а потом выводить Not Not A, то всегда будет одинаковые числа, но стоит только поставить бряк после вывода как цифры начинают немного отличаться.
По этому стоит добавить что:
Цитата Сообщение от Abu Посмотреть сообщение
Если найдёте вразумительное описание, то я тока спасиба скажу.
0
14 / 14 / 1
Регистрация: 03.09.2009
Сообщений: 109
01.11.2009, 03:02  [ТС]
Вот нашел тоже интересную штукенция как отловить неинициализированный массив:

Visual Basic
1
2
3
Function ArrayExists(arr() As Long) As Long
  GetMem4 ArrPtr(arr), VarPtr(ArrayExists)
End Function
Если функция возвращает не ноль, значит массив существует, аналогично можно сделать с массивами другого типа.
Может кому пригодится...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2009, 03:02
Помогаю со студенческими работами здесь

Можно ли как-то отловить NetSend, до того как он высветится
Мне нужно отловить NetSend и отобразить его содержание у себя в программе, а само окно Службы сообщений, показывать не надо. Кто знает...

Как отловить переменную?
Имеется таймер на JS... function myclock() { ndata=new Date() // Получение показаний часов, минут и секунд hours=...

Как отловить SIGSEGV?
Собственно вопрос в заголовке. Как отловить SIGSEGV? Заранее благодарю за помощь.

Как отловить событие ?
Есть следующее: &lt;div id=&quot;asd&quot;&gt; &lt;div class=&quot;qwe&quot;&gt; &lt;div id=&quot;1&quot; class=&quot;zxc&quot;&gt;&lt;/div&gt; &lt;div id=&quot;2&quot;...

Как отловить NULL?
Здравствуйте! Читаю данные из MS SQL Server'a. Бывают ситуации, когда значения в таблице нет (вместо него NULL). Мне нужно, когда значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru