Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2010, 13:49   #1
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию Правильное объявление глобальных переменных

Добрый день!

Подскажите, пожалуйста, в чем причина следующей проблемы. В моем VBA-проекте задаются несколько глобальных переменных, которые объявляются в отдельном модуле. Инициализация этих переменных происходит на этапе открытия книги (Инициализация одной из переменных происходит в событии Workbook_Open, две других (текстовых) - в открываемой по умолчанию форме UserForm). Операция проходит успешно, это подтверждается тестовыми вызовами команд Debug.Print. Работа с этими переменными проходит успешно до тех пор, пока не вызывается ЛЮБАЯ форма UserForm из моего проекта. После закрытия любой формы значения переменных "сбрасываются".

Подскажите, пожалуйста, как правильно объявить глобальные переменные, чтобы избежать подобной ситуации?

Заранее спасибо!
voam вне форума Ответить с цитированием
Старый 14.05.2010, 14:06   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Объявляете переменные в стандартом модуле? Как объявляете?
Как Вы инициализируете переменные? Не обнуляются ли значения в теле формы?
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 14.05.2010, 14:17   #3
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

Объявляю переменные в модуле "V":
Код:
Option Explicit

Public Login As String
Public ExtApp As Boolean
Public DBPath As String
Обращение к переменным осуществляется по принципу наследования: V.Var1, V.Var2 и т.д.

Я проверил еще раз - эти переменные нигде не обновляются в коде форм, там происходит только обращение к данным в режиме чтения ...
voam вне форума Ответить с цитированием
Старый 14.05.2010, 14:21   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
это подтверждается тестовыми вызовами команд Debug.Print.
а Debug.Print вы выполняете из другого модуля, или хотя бы из другой процедуры текущего модуля?
если написать
Вася = "Вася"
Debug.Print Вася
Это показывает, что переменная Вася в текущей процедуре получила значение "Вася" и совершенно не значит, что это имеет отношение к глобальной переменной Вася, которая некорректно обьявлена в одном из модулей.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.05.2010, 14:24   #5
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

А как Вы инициализируете переменные? Попробуйте вынести присвоение значений переменных за пределы модуля форм. Т.е. вызываете форму так:
Код:
UserForm1.Show
затем Вы в модуле формы присваиваете значение переменной, как я понял.

Попробуйте присвоить значение до показа формы
Код:
ExtApp = True
UserForm1.Show
И, кстати, совершенно не обязательно обращаться к переменным через модуль - V.Var1. Если они глобальные и уникальны, то можно просто Var1

Хотя я все же думаю, что где-то что-то неверно объявлено.

Есть еще вариант - Вы на форме программно создаете/удаляете некие элементы. Это тоже может приводить к обнулению.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 14.05.2010 в 14:28.
The_Prist вне форума Ответить с цитированием
Старый 14.05.2010, 14:25   #6
voam
Пользователь
 
Регистрация: 04.12.2009
Сообщений: 40
По умолчанию

Для объявления глобальных переменных у меня используется специально выделенный для этого модуль, в котором не содержится никаких процедур.
Вызов тестовой процедуры я провожу в другом модуле, "Module1".
voam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вынести объявление переменных в отдельный сегмент кода boris-blade Microsoft Office Word 1 16.01.2010 19:31
правильное снятие хука majestic Win Api 1 11.01.2010 02:52
правильное составление услвовия P®o©omp@s Помощь студентам 8 26.10.2009 09:59
Объявление переменных на ВЕСЬ проект Alex Cones Общие вопросы Delphi 8 25.04.2009 22:09
Как сделать привязку глобальных горячих клавиш к свой проге? Jinxers Помощь студентам 1 08.02.2009 00:29