Reproducir un WAV desde Excel a cierta Hora

07/07/2005 - 18:37 por Lyna | Informe spam
Hola a todos,

Quiero ver si alguien me puede orientar con lo siguiente, necesito que en
una hoja de Excel se ejecute una macro que me reproduzca un sonido WAV a
ciertas horas, y que me permita modificar esas horas, es decir un día puede
reproducirse a la 11:20 y quiza mañana ese mismo wav se reproduzca a las
11:50.

Les agradezco de antemano, a quien me pueda ayudar.

Saludos,

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
07/07/2005 - 23:32 | Informe spam
hola, Lyna !

... que... se ejecute una macro que me reproduzca un sonido WAV a ciertas horas y que me permita modificar esas horas
... un dia puede reproducirse a la 11:20 y quiza mañana ese mismo wav se reproduzca a las 11:50



1) sera necesario manejar un procedimiento 'OnTime' [NO 'recursivo'] en el evento '_Open' del libro
2) tambien se requiere hacer una llamada a las API's de windows [a la aplicacion WindowsMediaManager]
3) sobra mencionar que el archivo debera ser abierto ANTES de que 'le llegue su hora' :D
4) toma nota que los procedimientos 'OnTime' tienen su 'comportamiento' -bastante- especial [p.e. si el libro se cierra antes] :-(

te paso un ejemplo al final y... si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==Public Declare Function _
TocarMusicaWAV _
Lib "winmm.dll" _
Alias "sndPlaySoundA" ( _
ByVal Archivo As String, _
ByVal Estado As Long) As Long
Sub TocarMusica()
Dim EsteArchivo As String
EsteArchivo = "C:\Windows\Media\Entrada de Windows XP.wav"
TocarMusicaWAV EsteArchivo, 0
MsgBox "La macro estuvo detenida ""mientras"" la música ""tocaba""."
TocarMusicaWAV EsteArchivo, 1
MsgBox "La música está tocando, y la macro... se está ""ejecutando"" !!!"
End Sub
en el modulo de codigo del libro [ThisWorkbook] ==Private Sub Workbook_Open()
Application.OnTime TimeValue("16:14:00"), "TocarMusica"
End Sub

notas:
a) te expongo dos formas de 'tocar' la musica [o hacer la llamada a la funcion 'TocarMusicaWAV']
1) con el parametro [Estado] en cero... la ejecucion de la macro se detiene 'mientras la musica toca'
[observa que el mensaje NO aparece sino hasta que la musica ha dejado de tocar]
2) con el parametro [Estado] en UNO... la ejecucion de la macro continua 'mientras la musica toca'
[observa que el mensaje aparece de inmediato, en cuanto la musica empieza a tocar]
b) en el evento 'open' del libro, podrias 'tomar' la hora en que se ejecutara el procedimiento de alguna celda/hoja
[p.e.] ->Application.OnTime Worksheets("Hoja1").Range("a1"), "TocarMusica"<-
[sponiendo que en la celda 'A1' de la hoja 1 tienes un dato_hora del tipo: 16:14:00]
c) [igualmente] el nombre [o la asignacion] del archivo que se ha de tocar podrias 'tomarlo' igual que 'la hora' :))
d) existen otras diversas 'formas' de tocar musica por macros [incluso no solamente WAV's sino MP3, MIDI's, etc.]
Respuesta Responder a este mensaje
#2 Lyna
08/07/2005 - 23:22 | Informe spam
Muchisimas Gracias Héctor Miguel.

La idea en si es que se anuncie un mensaje en WAV cada cierta hora, pero
durante el día serán alrededor de 32 veces.

La hora puede variar de un día a otro, por ello necesito vincularlo con
alguna rango de datos, pero intentaré implantar lo que amablemente me
propones.

En sí ya tenía la programación para que reproduciera el WAV, estoy en el
proceso que a cierta hora se ejecute, obviamente el archivo en excel debe
estar abierto todo el tiempo.

Saludos, y otra vez MUCHAS GRACIAS.

"Héctor Miguel" escribió:

hola, Lyna !

> ... que... se ejecute una macro que me reproduzca un sonido WAV a ciertas horas y que me permita modificar esas horas
> ... un dia puede reproducirse a la 11:20 y quiza mañana ese mismo wav se reproduzca a las 11:50

1) sera necesario manejar un procedimiento 'OnTime' [NO 'recursivo'] en el evento '_Open' del libro
2) tambien se requiere hacer una llamada a las API's de windows [a la aplicacion WindowsMediaManager]
3) sobra mencionar que el archivo debera ser abierto ANTES de que 'le llegue su hora' :D
4) toma nota que los procedimientos 'OnTime' tienen su 'comportamiento' -bastante- especial [p.e. si el libro se cierra antes] :-(

te paso un ejemplo al final y... si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==> Public Declare Function _
TocarMusicaWAV _
Lib "winmm.dll" _
Alias "sndPlaySoundA" ( _
ByVal Archivo As String, _
ByVal Estado As Long) As Long
Sub TocarMusica()
Dim EsteArchivo As String
EsteArchivo = "C:\Windows\Media\Entrada de Windows XP.wav"
TocarMusicaWAV EsteArchivo, 0
MsgBox "La macro estuvo detenida ""mientras"" la música ""tocaba""."
TocarMusicaWAV EsteArchivo, 1
MsgBox "La música está tocando, y la macro... se está ""ejecutando"" !!!"
End Sub
en el modulo de codigo del libro [ThisWorkbook] ==> Private Sub Workbook_Open()
Application.OnTime TimeValue("16:14:00"), "TocarMusica"
End Sub

notas:
a) te expongo dos formas de 'tocar' la musica [o hacer la llamada a la funcion 'TocarMusicaWAV']
1) con el parametro [Estado] en cero... la ejecucion de la macro se detiene 'mientras la musica toca'
[observa que el mensaje NO aparece sino hasta que la musica ha dejado de tocar]
2) con el parametro [Estado] en UNO... la ejecucion de la macro continua 'mientras la musica toca'
[observa que el mensaje aparece de inmediato, en cuanto la musica empieza a tocar]
b) en el evento 'open' del libro, podrias 'tomar' la hora en que se ejecutara el procedimiento de alguna celda/hoja
[p.e.] ->Application.OnTime Worksheets("Hoja1").Range("a1"), "TocarMusica"<-
[sponiendo que en la celda 'A1' de la hoja 1 tienes un dato_hora del tipo: 16:14:00]
c) [igualmente] el nombre [o la asignacion] del archivo que se ha de tocar podrias 'tomarlo' igual que 'la hora' :))
d) existen otras diversas 'formas' de tocar musica por macros [incluso no solamente WAV's sino MP3, MIDI's, etc.]



Respuesta Responder a este mensaje
#3 Héctor Miguel
09/07/2005 - 00:12 | Informe spam
hola, Lyna !

La idea en si es que se anuncie un mensaje en WAV cada cierta hora... durante el dia seran alrededor de 32 veces.
La hora puede variar de un dia a otro... necesito vincularlo con alguna rango de datos
... ya tenia la programacion para... el WAV, estoy en el proceso que a cierta hora se ejecute [...]



[probablemente] lo 'interesante' sera encontrar la forma de 'decirle' al codigo...
-> de que 'depende' [y como o de donde obtenga]...
-> la variacion para '... cada cierta hora ...' y/o
-> la variacion para '... de un dia a otro ...' :))

si comentas detalles adicionales...
saludos,
hector.
Respuesta Responder a este mensaje
#4 Lyna
09/07/2005 - 01:46 | Informe spam
Gracias, Héctor Miguel,

Te explico, lo que se trata es de hacer una aplicación en excel para un
pequeño sistema de voceo, se trata que la hoja en excel sincronice y que
cuando sean por ejemplo las 8:20 reproduzca el WAV del vuelo 750 de Mexicana
de Aviación, a las 8:45 el vuelo 104 de Aviacsa y así consecutivamente.

Ya hice lo que me dijiste pero me marca error. Al abrir el archivo en Excel
no importa la hora que es, lo reproduce, y cuando termina marca error.

Abusando de tu amabilidad quisiera saber como hacer que hasta que sea la
hora indicada lo reproduzca, ya que dejaré el archivo abierto aprox. 16 horas.

Function Reproduce(RutaFichero As String)
On Error GoTo Err_Play_Click
'RutaFichero debe contener el Path completo+Fichero Wav a reproducir, es
decir, por ejemplo

Dim Temp As Long
Temp = mciSendString("close " & Chr(34) & RutaFichero & Chr(34), 0&, 0, 0)
Temp = mciSendString("open " & Chr(34) & RutaFichero & Chr(34), 0&, 0, 0)
Temp = mciSendString("play " & Chr(34) & RutaFichero & Chr(34), 0&, 0, 0)
Exit_Play_Click:
Exit Function

Err_Play_Click:
' Aviso de error de Sonidos
MsgBox "Aviso Nº " & Err.Number & " desde el programa Voceo" & Chr(13) _
& Err.Description, vbCritical + vbOKOnly, "Programa Voceo"
Resume Exit_Play_Click
End Function

Private Sub Workbook_Open()
Application.OnTime TimeValue("18:28:00"), Reproduce("C:\sistemas\1-51 pm
Prueba WAV.wav")
End Sub

Saludos,

hola, Lyna !

La idea en si es que se anuncie un mensaje en WAV cada cierta hora... durante el dia seran alrededor de 32 veces.
La hora puede variar de un dia a otro... necesito vincularlo con alguna rango de datos
... ya tenia la programacion para... el WAV, estoy en el proceso que a cierta hora se ejecute [...]



[probablemente] lo 'interesante' sera encontrar la forma de 'decirle' al
codigo...
-> de que 'depende' [y como o de donde obtenga]...
-> la variacion para '... cada cierta hora ...' y/o
-> la variacion para '... de un dia a otro ...' :))

si comentas detalles adicionales...
saludos,
hector.


Lina Isabel López del Angel
Asistente del Administrador



"Héctor Miguel" escribió:

hola, Lyna !

> La idea en si es que se anuncie un mensaje en WAV cada cierta hora... durante el dia seran alrededor de 32 veces.
> La hora puede variar de un dia a otro... necesito vincularlo con alguna rango de datos
> ... ya tenia la programacion para... el WAV, estoy en el proceso que a cierta hora se ejecute [...]

[probablemente] lo 'interesante' sera encontrar la forma de 'decirle' al codigo...
-> de que 'depende' [y como o de donde obtenga]...
-> la variacion para '... cada cierta hora ...' y/o
-> la variacion para '... de un dia a otro ...' :))

si comentas detalles adicionales...
saludos,
hector.



Respuesta Responder a este mensaje
#5 Héctor Miguel
09/07/2005 - 05:26 | Informe spam
hola, Lyna !

... se trata... de hacer una aplicacion en excel... que... sincronice y... por ejemplo
... 8:20 reproduzca el WAV del vuelo 750 de Mexicana de Aviacion
... 8:45 el vuelo 104 de Aviacsa y asi consecutivamente.
... hice lo que me dijiste pero... Al abrir el archivo... no importa la hora... lo reproduce, y cuando termina marca error.
... quisiera saber como hacer que hasta que sea la hora indicada lo reproduzca [...]
Function Reproduce(RutaFichero As String)
On Error GoTo Err_Play_Click
Dim Temp As Long
Temp = mciSendString("close " & Chr(34) & RutaFichero & Chr(34), 0&, 0, 0)
Temp = mciSendString("open " & Chr(34) & RutaFichero & Chr(34), 0&, 0, 0)
Temp = mciSendString("play " & Chr(34) & RutaFichero & Chr(34), 0&, 0, 0)
Exit_Play_Click:
Exit Function
Err_Play_Click:
MsgBox "Aviso Nº " & Err.Number & " desde el programa Voceo" & Chr(13) _
& Err.Description, vbCritical + vbOKOnly, "Programa Voceo"
Resume Exit_Play_Click
End Function
Private Sub Workbook_Open()
Application.OnTime TimeValue("18:28:00"), Reproduce("C:\sistemas\1-51 pm Prueba WAV.wav")
End Sub



[me parece que] existen varios 'puntos' [en el codigo que expones] que [tarde o temprano] 'causaran errores' :-(
1) la funcion que usas [mciSendString] en las 'llamadas' a las API's de la aplicacion Windows MediaManager [Lib "winmm.dll"]...
a) [normalmente] se utiliza para 'administrar/manejar/manipular/...' dispositivos de CD/DVD/... [como su bandeja/charola]
b) la cadena que usas [para 'tocar' el archivo wav]... "play " NO tiene soporte 'directo' por la funcion 'mciSendString'
-> para que 'funcione'... REQUIERE de las 2 instrucciones previas ['close' y 'open']
-> efecto IGUAL al que logras con una sola instruccion PERO usando la funcion 'sndPlaySound' en lugar de 'mciSendString'
-> revisar los ejemplos y notas del mensaje anterior, 'concretamente'... la nota 'a)' en el 'inciso 2' :))
2) la situacion que comentas de que 'sin importar la hora'... al abrirse el fichero 'se toca' el archivo wav... se debe a lo siguiente...
a) el metodo 'OnTime' REQUIERE que su segundo argumento [macro_a_ejecutar] sea una cadena de texto <= OJO
b) al abrirse el archivo [de excel]... vba 'corre' una 'auto-depuracion' [por si las moscas] y 'detecta' [como error] la falta de la cadena :-(
c) [de todas formas]... 'trata de continuar'... y [por consiguiente] 'ejecuta' la llamada a la funcion [Reproduce] ->por eso SI 'toca'<- :))
d) [por lo anterior]... el metodo 'OnTime' NO 'tuvo la oportunidad'... de ser 'programado' [por vba_excel] en el evento open del libro :-(

[en resumen]...
1) para que 'funcione la programacion' de eventos con el metodo 'OnTime'...
-> su segundo argumento [macro_a_ejecutar] necesita ser una cadena de texto
2) si requieres de un procedimiento que [a su vez] 'tome/reciba' argumentos 'adicionales' [al 'solo' nombre de la macro]...
-> para que puedas usarlo con el metodo 'OnTime' [que requiere la macro como una cadena de texto]...
-> sera necesario encontrar una 'mejor manera' de 'pasar' varios eventos/horas/archivos _wav/... como 'argumentos' del 'OnTime' ;)
[p.e.] usar matrices... constantes... celdas/rangos en alguna hoja... etc. etc. etc.

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida