Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 12.07.2016
Сообщений: 7
1

Не понятное обнуление глобальных переменных

12.07.2016, 22:08. Показов 7667. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Я тут новенький, так что если что не так, прошу прощение. :-)
Суть вопроса в следующем. Поясните пожалуйста почему происходит обнуление переменных в Пример1.
И главное, как это избежать?


Прикрепляю два файла.

За ранее, благодарю.
Вложения
Тип файла: xls Пример1_с КНОПКОЙ В ШАБЛОНЕ.xls (31.5 Кб, 11 просмотров)
Тип файла: xls Пример2_БЕЗ КНОПКИ.xls (30.0 Кб, 5 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2016, 22:08
Ответы с готовыми решениями:

Создание глобальных переменных в Excel
Проблема: есть макрос,один лист и собственно книга - нужно где-то хранить числовые значения,...

Access 97 иногда сбрасывает значения глобальных переменных
Заметил (и не только я), что Access 97 иногда сбрасывает значения глобальных переменных. Пару раз в...

Сохранение глобальных переменных между сеансами работы с книгой
Привет! Спрошу, скорее всего, глупость, и заранее извиняюсь за это: беглый поиск в гугле при...

В чем разница объявления глобальных переменных в module или в ThisDocument?
Скажите в чем разница объявления глобальных переменных в module1 или в ThisDocument? и можно ли...

13
2 / 2 / 1
Регистрация: 15.08.2014
Сообщений: 30
13.07.2016, 08:33 2
Опытным путём было доказано что на время процедуры работы с листами переменная не терялась, и в конце процедуры оставалась с тем же значением.
Значение переменной теряется после выхода из процедуры в которой фигурирует удаление листа

Тайна где-то рядом...

Решил вашу проблему хитровычурным способом (Код к первому листу для кнопок):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub CommandButton1_Click()
    Wacc = 25
End Sub
 
Sub CommandButton2_Click()
    Static tmp% 'Статичная переменная для сохранения
                'данных после выброса из процедуры
    tmp = Wacc
    
    Application.DisplayAlerts = False
    Sheets(2).Copy after:=Sheets(Sheets.Count)
    Sheets(3).Name = "Pice"
    Sheets(2).Delete
    Sheets(1).Activate
    Application.DisplayAlerts = True
    
    Wacc = tmp 'Копируемое значение отдали обратно
End Sub
 
Private Sub CommandButton3_Click()
    MsgBox Wacc
End Sub
Переменная Wacc есс-но объявлена в отдельном модуле как у вас

Не могу сказать о его надежности, но раз работает почему бы и нет.
1
0 / 0 / 0
Регистрация: 12.07.2016
Сообщений: 7
13.07.2016, 09:09  [ТС] 3
Спасибо, но немного не то. В моем случае это больше похоже на "костыль".
Дело в том, что прикрепленные файлы, это лишь пример, как происходит ошибка на основном коде. А там этих переменных поболее и для каждой держать статическую и последующей инициализацией... Совсем все геморно получается. Проще мне отказаться от кнопки в Шаблонах и подумать о решение другим способом. :-) Но хотелось бы понять все же почему это происходит.
Как видно из Примера2, без кнопки в Шаблоне и при удалении листа переменные не теряют своих значений. И обнуление как-то связано с удалением и кнопками в тех листах.

Все равно Благодарю Вас за попытку помощи. Возможно еще кто сможет разобраться. :-)
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
13.07.2016, 09:11 4
глобальные переменные обнуляются при возникновении ошибки кода
0
0 / 0 / 0
Регистрация: 12.07.2016
Сообщений: 7
13.07.2016, 09:17  [ТС] 5
1. Если ошибка, почему не выдает предупреждение об этом?
2. И где именно ошибка в коде в прикрепленном файле(Пример 1)?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
13.07.2016, 09:19 6
Попробуйте вместо кнопок поставить рисунки - может это связано именно с кнопками?
Я тоже видел что после удаления листа переменная ещё живая, а уже при следующем вызове обнулена.
0
0 / 0 / 0
Регистрация: 12.07.2016
Сообщений: 7
13.07.2016, 09:25  [ТС] 7
Попробовал, но то же самое. Как-то связано с объектом в целом.
Причем потеря происходит сразу же после строки удаления листа, а не по выходу из процедуры, как писал
PandoraBox.
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
13.07.2016, 09:29 8
Я сразу после удаления смотрел значение переменной - там всё ещё было 25.
0
0 / 0 / 0
Регистрация: 12.07.2016
Сообщений: 7
13.07.2016, 09:37  [ТС] 9
Да, ТОЧНО, проверил! Не туда посмотрел. Прошу прощения. После удаления еще значения есть. Значит переменные обнуляются после выхода из процедуры, как и писал PandoraBox.
0
190 / 59 / 20
Регистрация: 16.07.2013
Сообщений: 234
13.07.2016, 10:48 10
проблема в ActiveX, без костылей вам не обойтись
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
13.07.2016, 11:02 11
Так сказали что проверяли без ActiveX...

Добавлено через 5 минут
Проверил сам - с рисунками всё работает как надо, значение сохраняется.
Кто если не мы...

Добавлено через 3 минуты
Правда я для надёжности сразу убрал в названии макроса эти _Click, проверьте сперва не изменяя название.
1
0 / 0 / 0
Регистрация: 12.07.2016
Сообщений: 7
13.07.2016, 11:44  [ТС] 12
Hugo121, а можете файлик прикрепить с рабочим вариантом (я так понял с рисунком вместо кнопки) если вас не затруднит.
Спасибо.
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
13.07.2016, 11:59 13
Файл показать не могу. Да и нет его уже...
Но ведь нет проблем удалить эти кнопки, вместо них поставить на лист две автофигуры (или любые рисунки), далее на каждый рисунок по ПКМ назаначить свой макрос. Только уберите на время из названия макроса private, а то не увидите их в списке.

Добавлено через 3 минуты
Вообще с этими кнопками была у народа беда после некоторых обновлений...
Я их вообще не использую, поэтому опыта беды нет
1
0 / 0 / 0
Регистрация: 12.07.2016
Сообщений: 7
13.07.2016, 12:34  [ТС] 14
Да, с рисунком я уже проверил, работает. ДО этого я рисунок вставлял как Элемент управления.
Но тут такое дело, мне для кнопки требовалось использования свойства Visible, а с рисунком так не получится.
Или же тоже можно как-то по условию скрывать и отображать рисунок?

Добавлено через 10 минут
Вот нашел похожую ситуацию Excel 2003. Глобальная переменная = 0 в Worksheet_SelectionChange
Видимо глюк какой-то.
Сделал костыль в виде новой инициализации всех скопом переменных.

Всем спасибо за участие. :-)
0
13.07.2016, 12:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2016, 12:34
Помогаю со студенческими работами здесь

Обнуление глобальных переменных
Есть юнит который вытягивает некоторую информацию из файла и выводит её пользователю. Но при этом...

Рассмотреть программу, написать имена глобальных переменных, локальных переменных, формальных параметров
Program P1; var s:string; procedure P(var s:string) ; var i, j : integer; ...

О глобальных переменных
Народ всем привет! Я только начал программировать на Visual Basic 2005 express edition. Помогите с...

Определение глобальных переменных
Где можно определять глобальные переменные. Причина тому, что надо считывать с формы такие значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru