Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Обновление переменных в макросе
 
Здравствуйте. Нужна подсказка, так как самому разобраться не получается.  
Есть следующая конструкция  
   
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, а не тем, которые были, когда файл открывался?  
 
Спасибо
Автозапуск макроса
 
Здравствуйте!  
Есть следующая проблема. Существует простенький макрос, запускающийся при открытии и с 10-минутной периодичностью запускающий макрос alarm.  
Sub Auto_Oðen()  
For i = 0 To 100  
Application.OnTime Now + 10 * i / 1440, "alarm"  
Next i  
End Sub  
 
Макрос alarm тоже очень простой и при выполнении нехитрых условий (типа больше-меньше) проигрывает звуковой файл.  
 
Казалось бы все просто, но при открытии книги ни фига не происходит (хотя должен проигрываться звуковой файл). При этом если я вхожу в VB и вручную запускаю макрос Auto_open, то звук проигрывается. В связи с этим вопрос: как можно проверить, запустился (запускался) ли макрос при открытии книги, и если да - то почему ни результата, ни сообщения об ошибке?  
Спасибо
Остановка работы звукового макроса, вызванная из другого макроса
 
Здравствуйте. Возникла очередная проблема. Есть флажок, если он в состоянии вкл, то запускается макрос1, если выкл, то ничего не происходит. Проблема однако в том, что макрос1 проигрывает звуковые файлы с привязкой ко времени, а значит длится пока не проиграет их всех. Мне неообходимо как-то остановить работу данного макроса, если я в какой-то момент времени ставлю флажок в состояние выкл. После неоднократных попыток я пришел к выводу, что задача заключается в очистке очереди звуковых файлов, которая образовалась после запуска макроса1 первый раз.  
 
sub Макрос1  
a = checkbox1.value  
For i = 1 To n  
If a = false Then PlaySound "", &H40: Exit Sub  
Application.OnTime Now + i / 1440, "alarm" & i  
Next i  
end sub  
 
Alarm1, Alarm2,... - это коротенькие макросы, как раз и проигрывающие звуковые файлы с помощью API Playsound.  
Строка _PlaySound "", &H40: Exit Sub_ - это моя попытка чистить список звуковых файлов (SND_PURGE). Но она не работает, так как эксель один раз проходит цикл (когда флажок еще включен) и больше не обращается к этому значению.  
 
Как быть?
Проверка времени последнего издавания экселем звука )
 
Здравствуйте. Есть простая функция, которая проигрывает звуковой файл при выполнении определенных условий.  
 
Private Declare Function PlaySound Lib "winmm" Alias "sndPlaySoundA" (ByVal sndName As String, ByVal Tip As Long) As Long  
 
Function Alarm1(ByVal a As Double, ByVal b As Double, ByVal MTM As Double)  
Dim sound1 As String  
If Abs(a) > Abs(b) And MTM < 0 Then  
sound1 = ThisWorkbook.Path & "\zvuki\sound1"  
PlaySound sound1, 1  
Alarm1 = True  
Else  
Alarm1 = False  
End If  
End Function  
 
Параметры a, b, MTM - это ссылки на ячейки и как минимум одна из них регулярно изменяется. Мне нужно, чтобы звук появлялся не каждый раз, когда происходит изменение, а только, если между последним его появлением прошло не меньше какого-то времени, например, 10 минут.  
Поможете?
Теоретический вопрос по VBA
 
Здравствуйте. Подскажите, если есть желание. Есть пользовательская функция. Она вызывается в основном коде. Ей передаются три параметра, один из которых числовой. Функция считает и выдает значение, которое далее используется. Но попутно она изменяет значение переданного ей параметра, который требуется сохранить в том виде, в котором он передан в функцию. Как правильно написать?  
Спасибо.  
 
Пример  
 
Function xxx (Type as String, Way as String, t as Double)  
...  
t=t*6  
xxx=54  
End function  
 
Sub main  
...  
var3=5  
r=xxx (var1, var2, var3)  
' после использования функции var3 становится равным 30. А надо, чтобы оно оставалось 5.  
...  
End sub
Как прописать итерации в макросе?
 
Здравствуйте. Возникла необходимость написать пользовательскую функцию. Функция вычисляет переменную из имеющейся формулы. В прямом виде эту переменную из формулы не выразить, поэтому необходимы итерации. Формула сходимости ряда есть, а как коротко прописать саму итеративную процедуру в VB не знаю. Можно, конечно, попытаться изобрести велосипед, но может быть есть готовые решения?  
Функция такая (для справки вариант параметров: (P, 100, 110, 0.09, 0, 10):  
 
Function SVol(ty As String, F As Double, K As Double, t As Double, r As Double, premium As Double) As Variant()  
Dim v As Double  
Dim o As Double  
v = 0.2  
Do  
d1 = (Log(F / K) + 0.5 * t * v ^ 2) / (v * Sqr(t))  
d2 = (Log(F / K) - 0.5 * t * v ^ 2) / (v * Sqr(t))  
nd1 = Application.WorksheetFunction.NormSDist(d1)  
nd2 = Application.WorksheetFunction.NormSDist(d2)  
nd3 = Application.WorksheetFunction.NormSDist(-d1)  
nd4 = Application.WorksheetFunction.NormSDist(-d2)  
If ty = "C" Then o = (F * nd1 - K * nd2) * Exp(-r * t) Else o = -(F * nd3 - K * nd4) * Exp(-r * t)  
ve = (1 / Sqr(2 * 3.14159265358979)) * Exp(-0.5 * d1 ^ 2) * F * Sqr(t) * Exp(-r * t)  
x = v * (opt - premium) / ve  
Loop Until x > 0.001  
svol = v  
End Function  
 
Собственно, х в данном случае сходится к нулю при условии изменения v. Вопрос в том, как прописать итеративную процедуру изменения v. В самом экселе, через подбор параметра это работает без проблем, но в данном случае нужна именно пользовательская функция.  
Спасибо.
Опять проблемы с формулой массива
 
Не работает как надо формула массива. Пример и объяснение в файле. Спасибо
Не работает формула массива, не могу разобраться
 
Есть вертикальный ряд дат и соответствующих им значений. Мне нужны значения на первый день каждого месяца каждого года. Написал формулу. Если использовать в ней только год или только месяц, то работает. Если ставится условие и год и месяц, то не работает. Помогите разобраться.  
Пример во вложения
Непростой расчет среднего
 
Здравствуйте.  
Есть ряд значений. Он постоянно увеличивается (в него снизу добавляются значения) Если последнее значение в ряду больше числа z, то необходимо найти среднеарифметическое данных значений в диапазоне от последнего вхождения значения в зону выше числа z до текущего значения. Необходимо сделать это функциями, без макросов и дополнительных столбцов. Я пришел к мысли, что необходимо суммесли() поделить на счетесли(), но как записать начало диапазона, которое соответствует последнему заходу в зону выше числа z догадаться не могу.  
Например, есть ряд  
1  
3  
7  
3  
7  
9  
6  
8  
Если число z=5, то необходимо взять среднеарифметическое последних четырех чисел. Если число z=6, то в расчет среднеарифметического попадает только последнее число. И т.д. В конец ряда постоянно добавляются числа.  
Буду признателен за помощь
Динамический диапазон перестает обновляться после повторного открытия файла
 
Здравствуйте. Проблема такая, что динамический диапазон используется в графике и прекрасно работает после того, как график построен. Но после закрытия файла и открытия по новой он работать перестает. Как я понимаю, он перестает воспринимать ссылку на этот диапазон. Ни добавление данных, ни даже их полное удаление не вызывают никакой реакции: рисуется изначальный график. В "Значениях ряда" он пишет =[0]!ceny вместо первоначального =имя_файла.xlsx!ceny.
Я в настройках Excel сделал подключение к внешним данным и автоматическое обновление данных в книге. Не помогло.  
 
Подскажите, какие есть идеи?
Страницы: 1
Наверх