Страницы: 1
RSS
Можно ли проверить динамический массив на наличие данных?
 
Доброе время суток. Есть глобальный динамический массив (2007 Excel) и в него переодически выгружаются различные данные, по неоходимости массив зачищается-непосредственно сам вопрос: как определить есть ли данные в массиве? Заранее спасибо.
 
{quote}{login=The_Prist}{date=16.01.2010 08:29}{thema=}{post}Что значит глобальный? Вам макросом надо узнать? Что Вы подразумеваете под массивом - диапазон ячеек, массив как переменная, коллекция?{/post}{/quote}  
 
под массивом я понимаю переменную, да в в макросе (дабы определить стоит ли формировать данные заново или возможно они уже есть в массиве и удастся избежать напрасных вычислений)
 
может циклом проходить по всем элементам массива, если хоть один (или если все) больше нуля - то массив считается заполненным
 
{quote}{login=The_Prist}{date=16.01.2010 08:38}{thema=}{post}dim lcount as long  
lcount = Ubound(Arr)  
 
Arr - Ваш массив.  
lcount = вернет кол-во значений массива.{/post}{/quote}  
 
возможно я не корректно выразился но ситуация в следующем: после того как массив "затирается" он всё равно объявлен но не инициирован - Ubound - вернёт ошибку
 
{quote}{login=The_Prist}{date=16.01.2010 08:43}{thema=}{post}Dim lcount As Long  
On Error Resume Next  
lcount = UBound(Arr){/post}{/quote}  
 
так и делал - принимал решения на основе кода ошибки, но уж очень не красиво.  
(а самое неприятное как показала практика не надёжный)
 
{quote}{login=The_Prist}{date=16.01.2010 08:52}{thema=Re: Re: }{post}{quote}{login=Le][a}{date=16.01.2010 08:50}{thema=Re: }{post}(а самое неприятное как показала практика не надёжный){/post}{/quote}Позвольте узнать - чем он такой ненадежный?{/post}{/quote}
 
код ошибки не постоянен (причину пока не понял). Да и интересовало существует ли какой нить "прямой" метод.
 
{quote}{login=The_Prist}{date=16.01.2010 08:58}{thema=Re: Re: Re: Re: }{post}{quote}{login=Le][a}{date=16.01.2010 08:56}{thema=Re: Re: Re: }{post}код ошибки не постоянен{/post}{/quote}А зачем Вам для проверки наличия данных в массиве код ошибки? Достаточно знать, что она была
Err.Number <> 0  
А для окончательной подстраховки можно перед проверкой очищать ошибки  
 
On Error Goto 0: On Error Resume Next  
lcount = UBound(Arr)  
If Err.Number <> 0 Then MsgBox "массив пуст"{/post}{/quote}  
 
Я согласен, как частное решение этот вариант подходит. Но допустип массив вообще не объявлен-в этом случае диагностика будет не верна. В плане использования перехвата ошибок примерно всё понятно, может кто нить знает альтернативные методы.
 
Уважаемый The_Prist подскажите как в коде отменить перехватчик ошибок-дабы он не срабатывал на не предусмотренную ошибку.
 
{quote}{login=The_Prist}{date=16.01.2010 09:36}{thema=Re: }{post}{quote}{login=Le][a}{date=16.01.2010 09:29}{thema=}{post}Уважаемый The_Prist подскажите как в коде отменить перехватчик ошибок-дабы он не срабатывал на не предусмотренную ошибку.{/post}{/quote}Можно поподробней? Отменить пропуск ошибок оператором On Error Resume Next можно оператором
On Error Goto 0  
о чем я и написал в посте от 16.01.2010, 20:58. В результате перед считыванием данных из массива у Вас отсутствуют данные о ошибках, наступивших ранее и Вы получите ошибку только в случае не объявленного массива.{/post}{/quote}  
 
Прошу простить за невнимательность:)
 
Может, намного не в тему, но здесь можно почитать, как отловить неинициализированный массив:  
http://www.cyberforum.ru/vba/thread59041.html  
 
PS: Приведены весьма оригинальные решения вопроса - ни до одного из решений я бы сам не додумался...
 
{quote}{login=EducatedFool}{date=17.01.2010 12:10}{thema=}{post}Может, намного не в тему, но здесь можно почитать, как отловить неинициализированный массив:  
http://www.cyberforum.ru/vba/thread59041.html  
 
PS: Приведены весьма оригинальные решения вопроса - ни до одного из решений я бы сам не додумался...{/post}{/quote}  
 
Спасибо, Очень даже в тему, жаль только что в решении много шаманства и мало логики (второй вариант).
Страницы: 1
Читают тему
Наверх