Страницы: 1
RSS
Звук при нужном числе
 
Если у нас в ячейки оказывает число 5 или больше, то производиться звук. Я на форуме нашёл такой код:
Код
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
 
   beeps "jny3b3t5 5 jny3y3b 5 5 bynk2m5 bynk2m j2b2 n3y", speed: beeps 
"5 5 5 jny3b3t5 5 jny3y3b 5 5 bynk2m5 bynk2m j2b2 y3t", speed
    beeps "5 5 5 ff3y5 yy2yyy2yby2b4t", speed: beeps "5 5 5 ff2y5 tby tby nj3m", speed
End Sub

Sub beepNew(): Beep 440, 500: End Sub

А вот вторую часть я сделал вместо:

Код
Private Sub Worksheet_Calculate()
    If [a1] > 5 Then BeepH2
End Sub

Вот такую:

Код
Private Sub Worksheet_Calculate()
    If [a1] > 5 Then BeepH2
    If [a2] > 5 Then BeepH2
    If [a3] > 5 Then BeepH2
    If [a4] > 5 Then BeepH2
End Sub

И столкнулся с такой проблемой.

У меня изначально ячейки A1 A2 A3 A4 пустые.
Представим что они заполняются:
Например если в ячейки A1 число меньше 5-ти то звук не издаётся - ВСЁ ПРАВИЛЬНО, ПЕРЕХОДИМ К СЛЕДУЮЩЕЙ.
Например если в ячейки A2 число меньше 5-ти то звук не издаётся - ВСЁ ПРАВИЛЬНО, ПЕРЕХОДИМ К СЛЕДУЮЩЕЙ.
Например если в ячейки A3 число БОЛЬШЕ 5-ти то звук издаётся - ВСЁ ПРАВИЛЬНО, ПЕРЕХОДИМ К СЛЕДУЮЩЕЙ.
А вот если в ячейки A4 число меньше 5-ти то звук ИЗДАЁТСЯ - А ВОТ ЭТО УЖЕ НЕ ПРАВИЛЬНО, нужно чтобы не издавался.

Как исправить код?

 
Код
Private Sub Worksheet_Calculate()
    If [a1] > 5 Then
        beeph2
    ElseIf [a2] > 5 Then
        beeph2
    ElseIf [a3] > 5 Then
        beeph2
    ElseIf [a4] > 5 Then
        beeph2
    End If
End Sub
По вопросам из тем форума, личку не читаю.
 
Всё равно издаётся звук, хотя не должен.
Изменено: AlekseyFrolov - 17.12.2017 14:19:34
 
а Вы думаете, что это так, для порядка на новых строчках все написано?  
Изменено: БМВ - 17.12.2017 14:21:27
По вопросам из тем форума, личку не читаю.
 
Порядок исправил, поставил ваш. Но звук всё равно издаётся, как и при первом случае. Ставлю сначала цифру больше 5 издаётся, а потом меньше 5-ти всё равно издаётся. Попробуйте вы пожалуйста
 
Естесвенно, ведь пересчет срабатывает каждый раз и ваш Beep сработает каждый раз на то значение, что уже обработано ранее.

надо проверять именно ввод.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not IsNull(Intersect(Target, Range("A1:A4"))) Then
        If Target.Value > 5 Then beeph2
    End If
End Sub
Изменено: БМВ - 17.12.2017 14:34:18
По вопросам из тем форума, личку не читаю.
 
К сожалению не работает этот код тоже. Теперь вообще не издаёт звуки даже если больше 5-ти.
 
Кросс
http://www.excelworld.ru/forum/2
Страницы: 1
Наверх