Тема: Уничтожить все переменные по окончанию работы кода

Подскажите пожалуйста как уничтожить или обнулить все переменные (убрать их из оперативки) после завершения работы программного кода???
Я имею ввиду глобальные переменные объявленные как Public,
с разным расширение (Integer, String и т.д.)

Re: Уничтожить все переменные по окончанию работы кода

После завершения программы, наверно уже поздно очищать переменные, они и так уничтожаются.
А вот в процессе, вопрос. Если большая прога, то стоит об этом задуматься. Особенно при множестве форм, с кучей контролсов. Ну, объекты очищаются Nothing'ом.
А в большинстве мелких макросов, об очистке, мне кажется не критично беспокоится.
Допускаю, что я обшибаюсь.

Re: Уничтожить все переменные по окончанию работы кода

> Vildar
Дело в том, что глобальные переменные не уничтожаются и не обнуляются после завершения работы кода. Они висят в оперативной памяти компа до тех пор, пока их не вытеснят оттуда другие приложения или пока не закроют автокад. Это переменные, объявляемые в процедуре как Dim существуют только в той процедуре, в которой они объявленны.
Вот тут то и загвоздка. При повторном запуске процедуры эти "блуждающие" значения мешают делать правильный расчет. Подскажите пожалуйста есть ли такая команда, которая разом обнулит все глобальные переменные?

Re: Уничтожить все переменные по окончанию работы кода

Весь вопрос в области видимости переменных.

Re: Уничтожить все переменные по окончанию работы кода

> Кулик Алексей aka kpblc
Да я понимаю что и в этом вопрос. Глобальные переменные видны во всем проекте, но это мне просто необходимо.
Если с переменными, объявляемыми Dim все понятно (они обнуляются по завершению работы процедуры), то с переменными, объявляемыми Public не совсем понятно. Когда они прекращают свое существование??? Или могу перефразировать, как прекратить их существование в нужный момент, дабы они не мешали при повторном запуске???
Можно конечно в конце программного кода поставить строку:
НЕКАЯ_ГЛОБАЛЬНАЯ_ПЕРЕМЕННАЯ = 0 или
НЕКАЯ_ГЛОБАЛЬНАЯ_ПЕРЕМЕННАЯ = Nothing или
НЕКАЯ_ГЛОБАЛЬНАЯ_ПЕРЕМЕННАЯ = ""
но это как-то примитивно я считаю.
Мне бы хотелось узнать может есть команда, которая убирает из оперативки значения глобальных переменных???

Re: Уничтожить все переменные по окончанию работы кода

Вопрос - а зачем "прекращать" их существование? Если они нужны строго определенный период времени - значит, их надо объявлять как Private и менять логику работы программы. Или возвращать эти переменные как результаты выполнения некоторых функций и работать с ними уже таким образом.

Re: Уничтожить все переменные по окончанию работы кода

> Дашуля

Кулик Алексей aka kpblc пишет:

Или возвращать эти переменные как результаты выполнения некоторых функций и работать с ними уже таким образом.

На мой взгляд самое нормальное решение.
Ну кроме этого можно так, как Вы написали

> Дашуля
Или в самом начале программы присваивать этим переменным какие-то значения или их "обнулять".

Re: Уничтожить все переменные по окончанию работы кода

> Кулик Алексей aka kpblc

> bender
Спасибо Вам за помощь :)

Re: Уничтожить все переменные по окончанию работы кода

> Vildar
Вам особая благодарность :)
Спасибо!!!

Re: Уничтожить все переменные по окончанию работы кода

> Дашуля
Есть такая команда, End называется. Пример,- простейший модуль:

Option Explicit
Public N As Integer
Sub main()
 MsgBox N
 N = 5
 End
End Sub

Если без "End", то при 2-м и последующем запуске на экран будет выводится "5", с "End" -"0". Вообще, часто в оперативной памяти много мусора остается(в т.ч., загруженные формы). К примеру, вызываешь нажатием кнопки на одной форме появление другой, скрывая 1-ю:

Private Sub UF1Button1_Click()
UserForm1.hide
UserForm2.Show
End Sub

Затем после работы со 2-й формой возвращаешься к 1-й:

Private Sub UF2Button1_Click()
UserForm2.hide
UserForm1.Show
End Sub

Если пользователь вышел нажатием UF2Button1,в памяти остается невидимая 2-я форма, а если нажал Close button ("крестик")- то невидимая 1-я. Так что End в конце модуля лишним не будет.

Re: Уничтожить все переменные по окончанию работы кода

> AlexV
То есть Вы хотите сказать что команда End и есть та команда, которая прочищает оперативную память от ненужных переменных и форм?

Re: Уничтожить все переменные по окончанию работы кода

> AlexV
Именно так

Re: Уничтожить все переменные по окончанию работы кода

> AlexV
Спасибо за помощь. Это как раз то, что мне нужно :)
Именно эта команда мне и была нужна!

Re: Уничтожить все переменные по окончанию работы кода

Такая мулька, после прерывания проги по end, выползает сообщение "This action will reset your project", что сделать шоб она не появлялась?

Re: Уничтожить все переменные по окончанию работы кода

Честно говоря, не сталкивался. Это для одной конкретной программы или для всех без исключения? И насколько сложна программа? (содержит только стандартные формы, модули или + модули классов, может библиотеки какие подключаются?)

Re: Уничтожить все переменные по окончанию работы кода

> AlexV
Пока заметил в одной конкретной программе.
В англ. справке, что-то про static переменные говорится.
А так, небольшая прога для замены блоков из библиотеки(папки с dwg файлами).
Используется WinApi для вывода окна выбора папки (пример от SmeL). Простой класс для чтения/записи в ини, тож где-то здесь стырил.
Ну и глобальные переменные присутствуют, в том числе Const.
Это сообщение уже меня достало, звери - ваще завоют, а меня "обласкають".