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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 17:40   #1
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию вечно живая переменная

сам не верю сказанному в заголовке, но почему-то у меня происходит следущее:
при каждом последующем запуске макроса вида

Public i As Integer, ss As Integer
Sub test()
For i = 1 To 10
s
Next
End Sub

Function s()
Cells(1 + ss, 1) = "***"
ss = ss + 1
End Function

переменная "ss" начинает жить не с "0", а с последнего значения в предыдущем запуске. И "сбрасывается" только если в редакторе нажать Reset.

Разве так бывает?
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 11.10.2010, 17:52   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Попробуйте обнулять её или чистить память.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 11.10.2010, 17:54   #3
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

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

Public i As Integer, ss As Integer
Sub test()
For i = 1 To 10
s
Next
End Sub

Function s()
Cells(1 + ss, 1) = "***"
ss = ss + 1
End Function

переменная "ss" начинает жить не с "0", а с последнего значения в предыдущем запуске. И "сбрасывается" только если в редакторе нажать Reset.

Разве так бывает?
бывает если файл не закрывать
у вас же она объявлена как публичная, закройте откройте файл и Ваша "Вечная" переменная умрет

вот так ее можно похоронить заживо
Public i As Integer, ss As Integer
Sub test()
ss = 0
For i = 1 To 10
s
Next
End Sub

Function s()
Cells(1 + ss, 1) = "***"
ss = ss + 1
End Function
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 11.10.2010 в 17:59.
R Dmitry вне форума Ответить с цитированием
Старый 12.10.2010, 09:24   #4
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
у вас же она объявлена как публичная, закройте откройте файл и Ваша "Вечная" переменная умрет
суть именно в том, что необходимо несколько раз запускать процесс не закрывая файла.


Цитата:
Сообщение от R Dmitry Посмотреть сообщение
вот так ее можно похоронить заживо
Public i As Integer, ss As Integer
Sub test()
ss = 0
For i = 1 To 10
s
Next
End Sub

Function s()
Cells(1 + ss, 1) = "***"
ss = ss + 1
End Function

именно на таком варианте я и остановился, это единственный путь?

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Попробуйте обнулять её или чистить память.

по поводу чистки памяти - наверное, вместе с "ss" из памяти удалятся и все остальные переменные, хранящиеся в ней, а такой вариант не подходит.
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!

Последний раз редактировалось gsg; 12.10.2010 в 09:27.
gsg вне форума Ответить с цитированием
Старый 12.10.2010, 09:33   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Зачем эти переменные делаете публичными?
Объявляйте их одну в процедуре, другую в функции.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 12.10.2010, 11:22   #6
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

если объявлять ss в функции, то время ее существования ограничивается однократным выполнением функции. А необходимо, чтобы она сущствовала i циклов.
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Старый 12.10.2010, 13:29   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну вот сами и ответили - по окончании циклов значит надо обнулять. Если бы сказали, что в начале циклов должна быть обнулена - значит обнулять надо в начале цикла
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 12.10.2010, 16:06   #8
gsg
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 108
По умолчанию

ок, будем обнулять
-Возьмите лучших их лучщих!
-Лучшие из лучших зализывают раны...
-Тогда, возьмите лучших из худших!
gsg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ [Глобальная переменная] Lemo Помощь студентам 2 26.10.2009 17:49
переменная в адресе Shaggrath Помощь студентам 9 17.07.2009 21:05
Почему переменная а = 2??? Paul_AG Общие вопросы C/C++ 2 25.05.2009 18:55
Переменная и Memo ben95 Общие вопросы Delphi 2 18.04.2009 12:10
c# ссылочная переменная hizahazahub Общие вопросы .NET 1 16.04.2009 20:53