Область действия переменных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Zizy
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 03.11.2005 (Чт) 11:46

Область действия переменных

Сообщение Zizy » 09.12.2005 (Пт) 13:23

Эту тему я плохо знаю, но проблема встплывла только сейчас.
Вообще пишу в кореле, но подумал что лучше разместить тему тут.
Запускаю макрос, использование Корэлом памяти подскакивает. Заканчиваю выполнение макроса: или скрываю форму, или просто ЕНД, но данные не выгружаются. Использованая память та же. Это первое.
Когда использываю метод форма.Hide и все формы скрыты програма само собой завершается. Переменные хранящиеся в модуле иногда сохраняються, иногда нет. Почему? А еще в одном модуле public-переменная не сохраняется вообще после такого.
Вообщем хочу допустим сделать на форме две кнопки: выход-выгрузить все переменные(наверно нужно завершить работу через АПИ?) и перейти к корректировке в Кореле (там что-то похимичил, запустил тот же макрос и вернулся к своей форме, ведь когда запущена форма в кореле не похимичиш :( )
Всем ответившим заранее спасибо

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.12.2005 (Пт) 16:24

Переменные уровня модуля VBA живут до остановки программы после ошибки или кнопкой Стоп, а также до очередного редактирования кода.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Zizy
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 03.11.2005 (Чт) 11:46

Сообщение Zizy » 09.12.2005 (Пт) 17:43

Спасибо за ответ. Итак:

Моя форма
Код: Выделить всё
Private Sub CommandButton1_Click()
MsgBox kkk
kkk = 100
If MsgBox("Exit from program "END"?", vbYesNo) = vbYes Then
   End
Else
   Me.Hide
End If
End Sub


Мой модуль

Код: Выделить всё
Option Explicit
Public kkk As Byte
Public Sub test()
frm.Show
End Sub


Запускаю TEST. Результат. При нажатии "ДА" выводит "0". При нажатии "НЕТ" выводит "100". END это не редактирование кода, не остановка программы после ошибки и не кнопкой "СТОП", но переменная сбрасывается. Что не так?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.12.2005 (Пт) 18:03

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

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 09.12.2005 (Пт) 18:07

можно попробовать для начала вместо END использовать Unload Me

Zizy
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 03.11.2005 (Чт) 11:46

Сообщение Zizy » 09.12.2005 (Пт) 18:31

Попробовал Unload Me. Из памяти все равно не выгружается, хотя у меня больше информации все-таки в модулях а не в формах. Но вопрос вообщем не в этом. Щас не могу понять почему у меня сбрасывается одна переменная, хотя выходы везед скрытием форм. А вы пока подскажите как реализовать то что я спрашивал с самого начала. Мне не обязательно, чтобы переменные выгружались из памяти. Мне нада 2 кнопки, после нажатии первой я выхожу в корел и переменные сбрасываються, второй так же, только все модули, формы и прочее продолжает висеть, и я запустив макрос, возвращаюсь к некоторой форме.

HaSH
Новичок
Новичок
Аватара пользователя
 
Сообщения: 40
Зарегистрирован: 08.12.2005 (Чт) 12:24
Откуда: г. Киев

Сообщение HaSH » 09.12.2005 (Пт) 18:50

Поробуй обьявить переменную как Static

Static kkk as Integer

Zizy
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 03.11.2005 (Чт) 11:46

Сообщение Zizy » 09.12.2005 (Пт) 19:11

Пробовал. Такие переменные определяються только в процедурах / функциях, а в модулях нет.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 189

    TopList