Страницы: 1
RSS
Декларация Public. Почему не работает?
 
На одной Форме у меня считается переменная, которая учавствует в двух процедурах:  
в Функции, которая запускается при изменении Чекбоксов и в процедуре по нажании Кнопки на Форме. Я ее задекларировал, как Public  
Но вот мне нужно использовать эту переменную при инициализации другой формы, которая запускается уже после того, как эта переменная посчитана, т.е.не пустая.  
Ползу на самый верх кода и не нахожу там моей переменной. Тогда я ее снова декларирую, как Public, но при запуске она пустая. Разве, если переменную декларируешь, как Public, она работает не во всех процедурах? Может, ее надо декларировать как-то особенно? В каком-то особенном месте?
 
Декларация Public, действительно, должна находиться в особенном месте - в СТАНДАРТНОМ МОДУЛЕ, а не в модулях формы, листа или книги.
 
{quote}{login=EducatedFool}{date=20.09.2009 07:29}{thema=}{post}Декларация Public, действительно, должна находиться в особенном месте - в СТАНДАРТНОМ МОДУЛЕ, а не в модулях формы, листа или книги.{/post}{/quote}  
Что-то тоже не хочет и в стандартном модуле размещенный, показывать его на другой Форме.
 
Что бы переменая сохранялась после окончания процедуры, ее надо объявить как Static$ например - Static Counter As Integer
 
Здраствуй Мультипликатор,  
 
Переменная Public должна стоять перед всеми процедурами в САМОМ начале кода после описания Option. Я тоже в свое время парился...  
 
Владимир.
 
{quote}{login=VovaK}{date=20.09.2009 09:05}{thema=}{post}Здраствуй Мультипликатор,  
 
Переменная Public должна стоять перед всеми процедурами в САМОМ начале кода после описания Option. Я тоже в свое время парился...  
 
Владимир.{/post}{/quote}  
Перед всеми процедурами? Или только перед теми, где она учавствует?
 
Попробуйте объявите переменную в общем модуле (например, в Module1) в самом верху, где обычно пишется Option Explicit (над самой первой процедурой)
 
{quote}{login=}{date=20.09.2009 10:21}{thema=}{post}Попробуйте объявите переменную в общем модуле (например, в Module1) в самом верху, где обычно пишется Option Explicit (над самой первой процедурой){/post}{/quote}  
Что-то не хочет... Поставил везде, где только можно, но все равно пустое значение, что-то не так... Буду моделировать ситуацию на новом файле...
 
Перемести переменную в Watch Window отладчика и проследи как меняется ее значение при выполнении макроса... Все должно работать.
 
Да, действительно, работает.  
Работает даже на формах. Что же у меня не так?  
Буду искать.  
В приложенном файле всё работает и на формах.
 
А не может ли такая ситуация сложиться, если эта самая перменная, которая объявлена как Public, где-то в коде ещё раз объявлена - Dim?
 
{quote}{login=Юрий М}{date=21.09.2009 09:41}{thema=}{post}А не может ли такая ситуация сложиться, если эта самая перменная, которая объявлена как Public, где-то в коде ещё раз объявлена - Dim?{/post}{/quote}  
Нет. Я проверил - нету. Да и не мог я объялвять Dim, ведь я не задавал Option Explicit. Она (Option Explicit) стоит у меня только на Функции скролинга для формы и на Функции сумма прописью, а в остальном коде я ее не ставил.  
Может, кстати, поэтому Паблик и не работает?
 
{quote}{login=Мультипликатор}{date=22.09.2009 02:13}{thema=Re: }{post}Да и не мог я объялвять Dim, ведь я не задавал Option Explicit. {/post}{/quote} Без Option Explicit можно делать объявление Dim.  
Option Explicit не дает не делать.  
Хотя мне понятна Ваша логика. ;)
Bite my shiny metal ass!      
 
{quote}{login=VovaK}{date=21.09.2009 08:17}{thema=}{post}Перемести переменную в Watch Window отладчика и проследи как меняется ее значение при выполнении макроса... Все должно работать.{/post}{/quote}  
Вот!!! Обнуляется моя переменная!!!  
Поместил я ее в Watch Window и смотрю. (Не знал я этого раньше).    
Поместил, а ее Value пишет <Out of context>. Ну, думаю, нормально, она ведь в Модуле, Функция-то.  
Нажимаю на форме свой Чекбокс. Запускается моя Функция. И как только курсор переходит на Модуль, Value сразу становится "". Во как.  
Потом код проходит, значение присваивается... Но как только курсор переходит на Форму обратно, моя Паблик переменная снова  <Out of context>.  
Ну и как это понимать?
 
А сам этот файл "неправильный" можно глянуть?
 
{quote}{login=Юрий М}{date=22.09.2009 03:54}{thema=}{post}А сам этот файл "неправильный" можно глянуть?{/post}{/quote}  
Это большой файл с несколькими формами и с несколькими модулями. Не вижу смысла его выкладывать, там наверное, черт ногу сломает. Буду разбираться сам. К тому же, если Функцию расположить на Форме, то в пределах этой формы она (переменная) действует. Меня пока, на данном этапе, это устраивает. Просто я сделал еще одну промежуточную Форму, а на ней моя переменная не работает. Значит пока буду искать обходной путь. К тому же я еще не всё проверил вышесказанное.  
Есть еще какие-нибудь варианты?
 
Дим, так ведь ты даже фоту выкладывал - ГДЕ нужно объявлять.
 
Мне тоже так представляется.
 
{quote}{login=The_Prist}{date=22.09.2009 04:26}{thema=Re: Re: }{post}{quote}{login=Мультипликатор}{date=22.09.2009 04:04}{thema=Re: }{post}если Функцию расположить на Форме, то в пределах этой формы она (переменная) действует.{/post}{/quote}А у Вас переменная не в модуле формы случаем объявлена?{/post}{/quote}  
Я ее везде объявил, и в модуле Формы тоже. Щас попробую поубирать отовсюду, кроме стандартного модуля.
 
:-) А ведь Prist 21.09.2009, 08:30 Вам писал: "Не надо ставить везде"
 
{quote}{login=Юрий М}{date=22.09.2009 05:10}{thema=}{post}:-) А ведь Prist 21.09.2009, 08:30 Вам писал: "Не надо ставить везде"{/post}{/quote}  
Неа. Не хочет. Убрал отовсюду. Оставил Паблик только в стандартном модуле. , Функцию на Форме закомментировал полностью. Саму Функцию перенес в стандартный модуль и задекларировал Паблик:    
Public ВставкаСпСв As String  
Но на формах она снова <Out of context>.  
Что-то тут не так.
 
Всё!!! Нашел!!!  
Поменял название переменной на английские буквы и... Всё нормально, везде читается.  
Отсюда вывод для всех новичков: Если вы хотите переменную объявить публично, присваивайте ей имя ТОЛЬКО английскими буквами!!!  
А иначе вам удачи не видать!!!  
:-)
 
Вы этой переменной каким-то способом присваиваете значение в Форме, а когда переходите в общий модуль значение обнуляется? Или наоборот - в модуле присваиваете, а при переходе к Форме оно обнуляется?
 
Проверил: обозвал Public переменную нехорошим русским словом. Присвоил ей в форме значение. Попросил в стандартном модуле MsgBox Показать её. Показал. Значит дело не в Рус/Лат.
 
Обзывать переменнные посредством кирилицы - нехорошая практика. Лучше не привыкать... Скорее всего переменная объявлена повторно в форме, заменил на латиницу, а кирилица осталась локальной.
 
Вот даже не знаю, что сказать.  
Сегодня опять пытался проделать такую же операцию с другой переменной.  
Была у меня на Форме процедура при изменении Комбобокса, но по мере дальнейшего продвижения в построении кода вижу, что это действие необходимо делать несколько раз. Думаю, что перенос этой процедуры сам напрашивается в Функцию. Что я и сделал. Создал в стандартном модуле функцию. Её входную и выходные значения задекларировал там же в стандартном модуле как Паблик. А в Форме оставил на событие при изменении Комбобокса вызов этой функции посредством Call. Ну и перед вызовом, соответственно, значение изменившегося Комбобокса присвоил Публичной входящей переменной функции.  
Проверяю. Не работает. Следуя совету, завожу переменную в Watch Window и смотрю. Пустая!!!  
Что же такое, думаю. И так проверил, и этак. Нету.  
Ну, думаю, надоело, потом посмотрю.  
Сохранился, вышел, ушел. Прихожу - проверяю. Да работает всё. "Шо цэ было?"
Страницы: 1
Читают тему
Наверх