Страницы: 1
RSS
Обновление переменных в макросе
 
Здравствуйте. Нужна подсказка, так как самому разобраться не получается.  
Есть следующая конструкция  
   
Public B_SP As Double  
Public B_Vo As Double  
_________________  
Sub Auto_Open()  
 
B_SP = [Results!X12]
B_Vo = [Results!X13]
Application.OnTime Now, "alarm"  
Application.OnTime TimeValue("12:02:00"), "alarm"  
________  
Sub Alarm  
if B_SP>B_Vo then....  
 
End Sub  
 
Проблема в том, что значения этих переменных макросом не обновляются (используются те, которые были получены при первом запуске), несмотря на то, что в ячейках Excel'я, куда ссылаются объявленные переменные к моменту нового запуска процедуры, изменения могут происходить.  
Как добиться того, чтобы в процедуру alarm, запускаемую в 12:02 передавались значения переменных B_SP и B_Vo, соответствующие значения ячеек X12 и X13 на листе Results на 12:02, а не тем, которые были, когда файл открывался?  
 
Спасибо
 
Если я правильно понял...  
Мож это запихнуть в Worksheet_Change?  
Private Sub Worksheet_Change(ByVal Target As Range)  
B_SP = [Results!X12]
B_Vo = [Results!X13]
Application.OnTime Now, "alarm"  
Application.OnTime TimeValue("12:02:00"), "alarm"  
End Sub  
Тогда при каждом чихе переменные будут обновляться.
Я сам - дурнее всякого примера! ...
 
Не, вот так:  
Private Sub Worksheet_Change(ByVal Target As Range)  
B_SP = [Results!X12]
B_Vo = [Results!X13]
End Sub  
Но уже Дима решение получше предложил:-)
Я сам - дурнее всякого примера! ...
 
Переменные уровня проекта нужны, так как они используются в большом количестве небольших процедур, причем разбросанных по разным модулям. Это я в данном примере упростил их набор до двух, на самом деле их намного больше.  
 
Идея с событием изменения на листе интересная, наверное действительно это выход, попробую.  
 
А правильно ли я понимаю, что это необновление переменных фундаментально, то есть в моем примере макрос Auto_Open() запустившись, сразу выполнился, использовав те значения, которые были на тот момент, и "запомнил", запуск процедуры в 12:02, которую произведет в назначенное время?
 
Однако, вот прочел, что событие Change не возникает, когда расчеты приводят к появлению другого значения формулы, а те ячейки, на которые ссылаются переменные - это как раз ячейки с формулами.  
Как я понимаю, именно из-за этого VBA и не обновляет их значения
 
Не подходит, так как переменные B_SP и B_Vo используются еще паре сотен других небольших процедур типа alarm, а определять их в каждой процедуре по новой как вы предлагаете, неудобно, так как для этого и нужны переменные уровня проекта
 
{quote}{login=Kirk}{date=28.06.2010 01:55}{thema=}{post}Не подходит, так как переменные B_SP и B_Vo используются еще паре сотен других небольших процедур типа alarm, а определять их в каждой процедуре по новой как вы предлагаете, неудобно, так как для этого и нужны переменные уровня проекта{/post}{/quote}  
Kirk, не в каждой процедуре, только в Sub Alarm.  Оставьте их глобальными, раз так надо. Или еще лучше предложил Дима:  
Sub Alarm  
if [Results!X12]>[Results!X13] then....
End Sub  
Тогда вообще переменные останутся нетронутыми.
Я сам - дурнее всякого примера! ...
Страницы: 1
Наверх