Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

21 Октябрь 2017, 13:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: очистка переменной  (Прочитано 339 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Стартовое сообщение: 12 Август 2017, 09:42 »

Добрый день!  Есть макрос,  который в цикле открывает один и тот же  шаблон документа.  Переменной оDoc назначаю ThisDocument,  после выполнения цикла документ закрывается,  макрос возвращается в начало и пытается снова открыть документ,  а в переменной оDoc ещё висит "старый" документ.  В общем нужно очистить переменную оDoc.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 231


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 12 Август 2017, 11:16 »

Можно использовать:
Код:
Erase oDoc
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 715


« Ответ #2: 12 Август 2017, 11:49 »

oDoc=ThisComponent
...
oDoc=False
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 231


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 12 Август 2017, 12:25 »

oDoc=ThisComponent
...
oDoc=False
Попытка починить велосипед костылями засчитана Смеющийся
Записан

mikekaganski
Ветеран
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 613


« Ответ #4: 12 Август 2017, 12:59 »

Функция Erase в StarBasic реализована с учётом различий между VBA и StarBasic (см. lcl_eraseImpl() в basic/source/runtime/runtime.cxx).
В данном случае результат будет Empty.

Конечно, присвоение булевой переменной странный. Но канонический вариант очистки объектной переменной

Код:
oDoc = Nothing
Записан

С уважением,
Михаил Каганский
economist
Ветеран
*****
Offline Offline

Сообщений: 715


« Ответ #5: 12 Август 2017, 13:51 »

Попытка починить велосипед костылями засчитана

В некоторых случаях это как раз то, что нужно. C False вообще трудно что-либо перепутать :-)

Nothing, конечно, правильнее.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
economist
Ветеран
*****
Offline Offline

Сообщений: 715


« Ответ #6: 12 Август 2017, 13:58 »

А решать задачу как написал топикстартер, то все варианты - равнозначны:

oDoc=ThisDocument
' или даже правильно:
oDoc=ThisComponent
' все варианты - правильные, сработает любой
oDoc=False
oDoc=Nothing
oDoc=Empty
oDoc=""
oDoc=0
oDoc="пусто"
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 231


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #7: 12 Август 2017, 14:16 »

А решать задачу как написал топикстартер, то все варианты - равнозначны:
"Равнозначные" варианты часто приводят к неравнозначным результатам. Переменную очень желательно объявлять:
Код:
Dim oDoc As Object
тогда все варианты говорят сами за себя.
Записан

dimmon777
Пользователь
**
Offline Offline

Сообщений: 52


« Ответ #8: 13 Август 2017, 08:48 »

Всем огромное спасибо за ответы!! Проблема заключалась в моем нубизме) Нужно было все переменные назначать ПЕРЕД циклом. А я пытался назначить непосредственно в самом теле цикла, что и приводило к ошибке
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 715


« Ответ #9: 13 Август 2017, 16:16 »

dimmon777 - в цикле тоже можно назначать переменные. Чего нельзя там делать - это менять саму переменную цикла N
For N=1... или For Each N In...

Чтобы было меньше непоняток - всегда вверху модуля, если он больше 20 строк, пишите:

Option Explicit

А в тексте модуля - объявляйте переменные с указанием их типа:

Dim oDoc As Object

Это не то чтобы ускорит написание кода (скорее наоборот), но число глюков при отладке/доработке уменьшит в 10-100 раз.
   
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!