Dim Beep(1 To 2000 / 5) As Boolean Private Sub Worksheet_Calculate() For I = 1 To UBound(Beep) If Range("AX" & I * 5) > 5 Then ' или 'If Cells(I * 5, 50) > 5 Then If Not Beep(I) Then BeepH2: Beep(I) = True: Exit For Else Beep(I) = False End If Next I End Sub
[/vba]
Только я расчитывал на то , что ранее введенные данные могут меняться, если нет, то незачем лишних циклов, нужно по изменению работать.
ну слава богу
[vba]
Код
Dim Beep(1 To 2000 / 5) As Boolean Private Sub Worksheet_Calculate() For I = 1 To UBound(Beep) If Range("AX" & I * 5) > 5 Then ' или 'If Cells(I * 5, 50) > 5 Then If Not Beep(I) Then BeepH2: Beep(I) = True: Exit For Else Beep(I) = False End If Next I End Sub
[/vba]
Только я расчитывал на то , что ранее введенные данные могут меняться, если нет, то незачем лишних циклов, нужно по изменению работать.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Воскресенье, 17.12.2017, 19:57
Dim Beep(1 To 2000 / 5) As Boolean Private Sub Worksheet_Calculate() For I = 1 To UBound(Beep) If IsNumeric(Range("AX" & I * 5)) Then If Range("AX" & I * 5) > 5 Then ' или 'If Cells(I * 5, 50) > 5 Then If Not Beep(I) Then BeepH2: Beep(I) = True: Exit For Else Beep(I) = False End If Else Beep(I) = False End If Next I End Sub
[/vba]
Не могу воспроизвести, но попробуйте так [vba]
Код
Dim Beep(1 To 2000 / 5) As Boolean Private Sub Worksheet_Calculate() For I = 1 To UBound(Beep) If IsNumeric(Range("AX" & I * 5)) Then If Range("AX" & I * 5) > 5 Then ' или 'If Cells(I * 5, 50) > 5 Then If Not Beep(I) Then BeepH2: Beep(I) = True: Exit For Else Beep(I) = False End If Else Beep(I) = False End If Next I End Sub
bmv98rus, я так тестировал Ваш макрос. В строку 9, в столбцы B:M вставил единицы. Затем напечатал в "B8" 1. Произошел звук. Затем напечатал в "C8" 1, звука уже нет. Тут вопрос к автору - звук должен быть всегда или только при переходе от меньше 5 к больше 5? Если всегда, то тогда макрос пользователя bmv98rus не работает.
bmv98rus, я так тестировал Ваш макрос. В строку 9, в столбцы B:M вставил единицы. Затем напечатал в "B8" 1. Произошел звук. Затем напечатал в "C8" 1, звука уже нет. Тут вопрос к автору - звук должен быть всегда или только при переходе от меньше 5 к больше 5? Если всегда, то тогда макрос пользователя bmv98rus не работает.Karataev
Сообщение отредактировал Karataev - Воскресенье, 17.12.2017, 21:52
Karataev Вы правы на 100% что решать заказчику, когда что пикает. Я например так и не понял, что нужно в итоге, то есть критерий оповещения, более того поздно заметил появившийся только в 22 посте пример. В моем алгоритме тресхолд - переход одного из значений через 5.
Karataev Вы правы на 100% что решать заказчику, когда что пикает. Я например так и не понял, что нужно в итоге, то есть критерий оповещения, более того поздно заметил появившийся только в 22 посте пример. В моем алгоритме тресхолд - переход одного из значений через 5.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Ещё вопрос, а возможно ли сделать чтобы звук производился даже если файл экселя закрыт и в него программа вписывает данные, то есть другими словами звук производится сейчас когда файл включен и я сам заполня, а если файл заполняяется сам из источника, мозно ли сделать чтобы звук тозе производился дазе если я не зашел в сам лист. Мозет ли выкльченный лист издавать звук? А данные а экселе программа заполняет.
Ещё вопрос, а возможно ли сделать чтобы звук производился даже если файл экселя закрыт и в него программа вписывает данные, то есть другими словами звук производится сейчас когда файл включен и я сам заполня, а если файл заполняяется сам из источника, мозно ли сделать чтобы звук тозе производился дазе если я не зашел в сам лист. Мозет ли выкльченный лист издавать звук? А данные а экселе программа заполняет.stalber
И даже если комп выключен, то тоже можно, только тихонький-тихонький.
Можно но для этого надо написать уже VBS скрипт, или программку на другом языке, который, будет запускаться из системного планировщика задач ежесекундно или постоянно работать в цикле с таймаутом определенным. Он должен проверять все ваши условия, при этом надеятся на то что кто-то, что-то пересчитает без него, не стоит, так как формулы в закрытом файле не считаются, а потом издавать нужный звук.
awaddwaawddw, Посмтрите на тему, первоначальный вопрос, середину и к чему пришли. Мне одному кажется что связывает это только слово звук
И даже если комп выключен, то тоже можно, только тихонький-тихонький.
Можно но для этого надо написать уже VBS скрипт, или программку на другом языке, который, будет запускаться из системного планировщика задач ежесекундно или постоянно работать в цикле с таймаутом определенным. Он должен проверять все ваши условия, при этом надеятся на то что кто-то, что-то пересчитает без него, не стоит, так как формулы в закрытом файле не считаются, а потом издавать нужный звук.
awaddwaawddw, Посмтрите на тему, первоначальный вопрос, середину и к чему пришли. Мне одному кажется что связывает это только слово звукbmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Понедельник, 18.12.2017, 16:13
Книга 1 автоматически с помощью таймера макроса, получает данные из закрытой книги 2, каждые 30 секунд. Книга 1 не воспроизводит звук, как сделать чтобы Книга 1 воспроизводила звук?
Вот рабочий код, помогите пожалуйста его доработать:
[vba]
Код
Dim Beep(1 To 2000 / 5) As Boolean Private Sub Worksheet_Calculate() For I = 1 To UBound(Beep) If IsNumeric(Range("O" & I * 5)) Then If Range("O" & I * 5) > 5 Then ' или 'If Cells(I * 5, 50) > 5 Then If Not Beep(I) Then BeepH2: Beep(I) = True: Exit For Else Beep(I) = False End If Else Beep(I) = False End If Next I End Sub
[/vba]
[vba]
Код
Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Sub beeps(melody As String, Optional ByVal BeepTime As Integer = 200): mr = "qazwsxedcrfvtgbyhnujmik,ol.p;/['" ' If Not UCase(VBA.Environ(5)) Like "*IGORHOME*" Then If Not GRegB("EnableSound", az_Reg_Settings) Then Exit Sub For I = 1 To Len(melody) DoEvents nextlen = 1: letter = Mid$(melody, I, 1) nota = InStr(1, mr, letter) If IsNumeric(letter) And letter > 0 Then nextlen = letter: I = I + 1: nota = InStr(1, mr, Mid$(melody, I, 1))
If nota > 0 Then tone = 220 * (2 ^ ((nota - 1) / 12)): a = _ Beep(tone, nextlen * BeepTime) Else: a = Beep(30000, nextlen * BeepTime / _ 5) Next: End Sub
Sub beepH(): beeps "k", 100: End Sub Sub beepH0(): beeps "k", 30: End Sub Sub BeepH2(): beeps "k,k", 100: End Sub Sub beepL(): Beep 100, 100: End Sub Sub beepL0(): Beep 100, 30: End Sub Sub BeepL2(): Beep 100, 100: Beep 104, 100: Beep 100, 100: Beep 70, 200: End Sub Sub melody1(): speed = 150 beeps "5 5 3jnybt tybtftdx2d", speed: beeps "5 5 3jnybt tybtftdx2d", speed beeps "5 5 nnnyc3 ct2j nyc2 ty2btff ftf2t", speed: beeps "5 5 nnnyc3 ct2j nyc2 ty2btff ftf3 yb2t", speed End Sub Sub melody2(): speed = 250
Данный код что выше, он работает корректно, если нет надобности брать данные из закрытой книги в открытую книгу.
У меня 2 книги: книга 1 и книга 2.
Книга 1 автоматически с помощью таймера макроса, получает данные из закрытой книги 2, каждые 30 секунд. Книга 1 не воспроизводит звук, как сделать чтобы Книга 1 воспроизводила звук?
Вот рабочий код, помогите пожалуйста его доработать:
[vba]
Код
Dim Beep(1 To 2000 / 5) As Boolean Private Sub Worksheet_Calculate() For I = 1 To UBound(Beep) If IsNumeric(Range("O" & I * 5)) Then If Range("O" & I * 5) > 5 Then ' или 'If Cells(I * 5, 50) > 5 Then If Not Beep(I) Then BeepH2: Beep(I) = True: Exit For Else Beep(I) = False End If Else Beep(I) = False End If Next I End Sub
[/vba]
[vba]
Код
Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Sub beeps(melody As String, Optional ByVal BeepTime As Integer = 200): mr = "qazwsxedcrfvtgbyhnujmik,ol.p;/['" ' If Not UCase(VBA.Environ(5)) Like "*IGORHOME*" Then If Not GRegB("EnableSound", az_Reg_Settings) Then Exit Sub For I = 1 To Len(melody) DoEvents nextlen = 1: letter = Mid$(melody, I, 1) nota = InStr(1, mr, letter) If IsNumeric(letter) And letter > 0 Then nextlen = letter: I = I + 1: nota = InStr(1, mr, Mid$(melody, I, 1))
If nota > 0 Then tone = 220 * (2 ^ ((nota - 1) / 12)): a = _ Beep(tone, nextlen * BeepTime) Else: a = Beep(30000, nextlen * BeepTime / _ 5) Next: End Sub
Sub beepH(): beeps "k", 100: End Sub Sub beepH0(): beeps "k", 30: End Sub Sub BeepH2(): beeps "k,k", 100: End Sub Sub beepL(): Beep 100, 100: End Sub Sub beepL0(): Beep 100, 30: End Sub Sub BeepL2(): Beep 100, 100: Beep 104, 100: Beep 100, 100: Beep 70, 200: End Sub Sub melody1(): speed = 150 beeps "5 5 3jnybt tybtftdx2d", speed: beeps "5 5 3jnybt tybtftdx2d", speed beeps "5 5 nnnyc3 ct2j nyc2 ty2btff ftf2t", speed: beeps "5 5 nnnyc3 ct2j nyc2 ty2btff ftf3 yb2t", speed End Sub Sub melody2(): speed = 250