Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работать с Nothing, В справке не нашел... 
:(
    Опции темы
RockClimber
Дата 25.5.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Сейчас я занят тем, что перегоняю в аксессную базу данные из кучи экселевских файлов (в экселевских файлах - списки). Делается все кодом, запускаемым в аксессе.
Суть проблемы: есть функция, которая вызывается очень часто. В ней я описал как Static переменную (допустим, xlBook) типа Excel.Workbook. Перед первым запуском значение этой переменной равно Nothing. После инициализации переменной, естественно, уже не равно.
Есть три варианта: 
1. Оказаться от использования такой функции (возможно, но трудозатраты оценить не берусь)
2. Не описывать переменную как Static, а инициализировать каждый раз заново.
3. Оставить как есть, но тогда надо проверять значение переменной, и если оно равно Nothing, то инициализировать ее. Вся проблема в том, что функция IsNull() в любом случае возвращает False, а строчка
Код

if xlBook = Nothing then

Вызывает ошибку "Неправильное использование Nothing".
Вариант № 3 предпочтителен тем, что надо будет дописать всего одну строчку к тому, что уже есть. Вариант 2 не хотелось бы использовать, так как при моем объеме работы (до 100000 вызовов функции) работать она будет неделю (мне бы хотелось уложиться в одну - две ночи). Вариант 1 не нравится по большей частью тем, что половину написанного придется переписывать...
У кого какие соображения? 


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Akina
Дата 26.5.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата
IsEmpty Function
Returns a Boolean value indicating whether a variable has been initialized.

Пользуйтесь.

Что до Nothing - это специальное значение. Или, вернее, это записываемый в форме оператора присвоения метод очистки ссылки. Почему? да просто это метод переменной, а в синтаксисе VB переменные не имеют ни свойств, ни методов.
А с методом сравнивать нельзя. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
RockClimber
Дата 29.5.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Akina, спасибо за совет, но он мне не помог smile.
Вот кусок кода:
Код

sub XYZ ()
Static xlBook as Excel.Workbook
if IsEmpty(xlBook) then
Set xlBook = Excel.Workbooks.Open("C:\daily\18.xls")
end if
end sub


Вот в таком виде оно не работает. IsEmpty(xlBook) возвращает False до инициализации и после... Соответственно приходится либо каждый раз инициализировать заново, либо придумывать что-то еще... 


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
AsIs
Дата 29.5.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 2.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 17



На память не помню точно, но в обычном басике можно так:

Код

If IsNothing (x) Then

или так:

Код

If x is Nothing Then
 
PM MAIL ICQ   Вверх
Aloha
Дата 29.5.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



RockClimberх
У меня заработал такой код:
Код
Sub XYZ()
  Dim xlBook As Excel.Workbook
Debug.Print TypeName(xlBook)
  If TypeName(xlBook) = "Nothing" Or TypeName(xlBook) = "Object" Then
    Set xlBook = Excel.Workbooks.Open("C:\daily\18.xls")
  End If
Debug.Print TypeName(xlBook)
  xlBook.Close
Debug.Print TypeName(xlBook)
  Set xlBook = Nothing
Debug.Print TypeName(xlBook)
End Sub
   

Это сообщение отредактировал(а) Aloha - 29.5.2006, 20:00
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.