Se puede utiliar sonido al cumplirse una condición?

12/04/2004 - 17:07 por Gerardo Mejicano | Informe spam
Buenos días grupo:

Quisiera saber si es posible que al cumplirse una condición en una celda
determinada, se pueda hacer que Excel de un sonido?

Gracias de antemano,

Gerardo Mejicano
 

Leer las respuestas

#1 Héctor Miguel
13/04/2004 - 10:04 | Informe spam
hola, Gerardo !

... es posible que al cumplirse una condicion en una celda ... Excel de un sonido?



existen varias formas de lograr lo que deseas ;)
- usando los eventos de 'la hoja' [o los del libro] p.e.
el evento '_Change' [cuando 'dicha' celda cambia por 'entrada directa']
el evento '_Calculate' [cuando su resultado cambia por 'efectos de calculo' -en otras celdas-]
'contras': usar los eventos [generalmente] 'destroza' la posibilidad de 'des-hacer' los cambios [inhibe el 'UnDo'] :((
- [aunque hay 'otras varias'...] para todas es necesario hacer 'llamadas' a las API's del Windows MediaManager
y existen [al menos] tres 'sub-secciones' del WMM que se pueden utilizar:
- PlaySound -> 'mas util' cuando 'falla' la busqueda del archivo 'a tocar'
- sndPlaySound -> 'mas util' cuando 'necesitas' que la musica toque 'mientras la macro continua'
- mciExecute -> igual a la anterior, 'acepta' las extensiones 'midi' [como -largos- archivos mp3, midi, etc.]
=> NO TODOS los 'formatos de compresion' estan 'cubiertos' POR TODAS las opciones señaladas :( < [tal parece que todo tiene sus 'pros' y 'contras'] :((
- [creo que...] la forma 'mas versatil' para lo que requieres es...
crear una funcion 'personalizada' [y 'llamarla' como a 'cualquier otra' funcion de hoja de calculo] ;)

con los siguientes 'supuestos' [y con la primera de las opciones: 'PlaySound']:
- A1 es la celda que se va a 'monitorear' [cualquier valor, texto, formula, etc.]
- A2 'tiene' el 'operador de comparacion' [p.e. =, >=, <>, etc.] => si vas a usar la igualdad, ANTEPON un apostrofo >'=< <- A3 contiene el dato 'contra' el cual se hara la 'comparacion'
- C1 es la 'ruta al archivo' que se tocara 'si se cumple' la condicion [p.e. C:\Windows\Media\Reciclaje de Windows XP.wav]
- C2 es la 'ruta al archivo' que se tocara 'si NO se cumple la condicion [p.e. C:\Windows\Media\Ir_end.wav] =>'opcional'<- C3 es la celda donde 'usaras' la funcion 'personalizada' p.e. =AvisarSiCumple(A1,A2,A3,C1,C2)
[o puedes usar 'valores directos' en la funcion, p.e.: =AvisarSiCumple(35,"=",36,C1,C2)

- los 'argumentos' de la funcion son: =AvisarSiCumple(Comparar,Operador,Condición,ArchivoSiCumple,ArchivoSiNoCumple)
- 'segun' el/los archivo/s que especifiques...
si NO 'existe/n'... 'tocara' un sonido 'asincrono' [speakers de la pc]
si SI 'existe/n'...
si 'se puede/n tocar'... se toca/n
si NO 'se puede/n tocar'... ¡ ni modo !!!... no hara 'sonido alguno' ;)

el codigo te lo adjunto en seguida [espero que sea +/- lo que solicitas] ¿comentas?
saludos,
hector.

== en un modulo de codigo 'normal' =Private Const SonidoAsíncrono = &H1
Private Const ArchivoDeSonido = &H20000
Private Declare Function _
Usar_PlaySound _
Lib "winmm.dll" _
Alias "PlaySoundA" ( _
ByVal Archivo As String, _
ByVal Módulo As Long, _
ByVal Bandera As Long) As Long
Function AvisarSiCumple(ByVal Comparar As Variant, _
ByVal Operador As String, _
ByVal Condición As Variant, _
ByVal ArchivoSiCumple As String, _
Optional ByVal ArchivoSiNoCumple As String = "") As String
If Evaluate("""" & Comparar & """" & Operador & """" & Condición & """") Then
Usar_PlaySound ArchivoSiCumple, 0&, SonidoAsíncrono Or ArchivoDeSonido
AvisarSiCumple = "Cumplió !!!"
ElseIf ArchivoSiNoCumple <> "" Then
Usar_PlaySound ArchivoSiNoCumple, 0&, SonidoAsíncrono Or ArchivoDeSonido
AvisarSiCumple = "NO Cumplió !!!"
Else: AvisarSiCumple = "NO Cumplió !!!"
End If
End Function

Preguntas similares