Discussion:
WAV-Datei ausgeben und folgenden VBA-Code fliessend ausführen
(zu alt für eine Antwort)
paddy
2004-11-13 13:10:29 UTC
Permalink
Hallo Excel-Profis!

Ich suche nach einer Möglichkeit, per VBA eine Sounddatei abzuspielen.
Soweit lässt sich dies recht einfach mit einer API-Funktion
realisieren. Ich möchte jedoch, dass folgender VBA-Code während dem
Ausgeben der WAV-Datei fliessend ausgeführt wird. Gemäss dem
Excel-Newsletter von SmartToolsPublishing vom 08.06.2004 sollte diese
mit folgender Funktion machbar sein:

////////////////////////////
Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" _
(ByVal lpszName As String, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long

Const SND_ASYNC As Long = &H1
Const SND_FILENAME As Long = &H20000
Const SND_PURGE As Long = &H40
Const SND_LOOP As Long = &H8
////////////////////////////

Die Prozedur, die die Funktion aufruft, sieht folgendermassen aus:

////////////////////////////
Sub SchleifeMitMusik ()
Dim i As Single, j As Double
Call PlaySound("C:\Sounds\Warten.wav", _
0, SND_FILENAME Or SND_ASYNC)

'hier lang andauernder Schleifendurchlauf
For i = 1 To 10000
j = i / 10000
Range("A1").Value = j 'Während die Sounddatei quasi im
Hintergrund
Next i 'abgespielt wird, soll in Zelle A1 das
Ergebnis
End Sub 'der Berechnung angezeigt werden...
////////////////////////////

Gemäss Newsletter soll die Konstante "SND_ASYNC" dafür verantwortlich
sein, dass die Datei im Hintergrund abgespielt wird, und folgender
VBA-Code sofort ausgeführt wird. Die Konstante "SND_FILENAME" muss
immer angegeben werden, wenn eine WAV-Datei ausgegeben werden soll.
Die beiden Konstanten werden durch ein logisches "Or" miteindander
verknüpft.

Soweit so gut! Bloss: Es funktioniert nicht!!! Während der Wiedergabe
der Sounddatei, ist die Ausführung des VBA-Codes blockiert. Der
restliche Code wird erst ausgeführt, nachdem das Musikstück
vollständig ausgegeben worden ist!!

Kennt hier jemand eine alternative Variante, mein Problem zu lösen?
Oder sieht jemand weshalb, dieses Funktionsgerüst nicht das tut, was
es eigentlich soll?? Habe ich etwas vergessen???

Vielen Dank für Eure Anregungen und Tipps!

Gruss
paddy
Reinhard Schüll
2004-11-13 16:32:37 UTC
Permalink
Hallo "paddy",
ab Excel 8 (Office 97) sind Audiodateien nicht mehr in erwünscht. Die HIlfe
sagt:
Diese Methode sollte nicht benutzt werden. Audio-Notizen wurden aus
Microsoft Excel entfernt.


Gruß
Reinhard
Post by paddy
Hallo Excel-Profis!
Ich suche nach einer Möglichkeit, per VBA eine Sounddatei abzuspielen.
Soweit lässt sich dies recht einfach mit einer API-Funktion
realisieren. Ich möchte jedoch, dass folgender VBA-Code während dem
Ausgeben der WAV-Datei fliessend ausgeführt wird. Gemäss dem
Excel-Newsletter von SmartToolsPublishing vom 08.06.2004 sollte diese
////////////////////////////
Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" _
(ByVal lpszName As String, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Const SND_ASYNC As Long = &H1
Const SND_FILENAME As Long = &H20000
Const SND_PURGE As Long = &H40
Const SND_LOOP As Long = &H8
////////////////////////////
////////////////////////////
Sub SchleifeMitMusik ()
Dim i As Single, j As Double
Call PlaySound("C:\Sounds\Warten.wav", _
0, SND_FILENAME Or SND_ASYNC)
'hier lang andauernder Schleifendurchlauf
For i = 1 To 10000
j = i / 10000
Range("A1").Value = j 'Während die Sounddatei quasi im
Hintergrund
Next i 'abgespielt wird, soll in Zelle A1 das
Ergebnis
End Sub 'der Berechnung angezeigt werden...
////////////////////////////
Gemäss Newsletter soll die Konstante "SND_ASYNC" dafür verantwortlich
sein, dass die Datei im Hintergrund abgespielt wird, und folgender
VBA-Code sofort ausgeführt wird. Die Konstante "SND_FILENAME" muss
immer angegeben werden, wenn eine WAV-Datei ausgegeben werden soll.
Die beiden Konstanten werden durch ein logisches "Or" miteindander
verknüpft.
Soweit so gut! Bloss: Es funktioniert nicht!!! Während der Wiedergabe
der Sounddatei, ist die Ausführung des VBA-Codes blockiert. Der
restliche Code wird erst ausgeführt, nachdem das Musikstück
vollständig ausgegeben worden ist!!
Kennt hier jemand eine alternative Variante, mein Problem zu lösen?
Oder sieht jemand weshalb, dieses Funktionsgerüst nicht das tut, was
es eigentlich soll?? Habe ich etwas vergessen???
Vielen Dank für Eure Anregungen und Tipps!
Gruss
paddy
Stefan Onken
2004-11-13 16:45:41 UTC
Permalink
hallo paddy,

bei mir gehts mit
Declare Function sndPlaySound32 Lib "winmm.dll" Alias _
"sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As
Long
Sub ton()
Dim datName
datName = Application.GetOpenFilename("Sounddatei(*.wav),*.wav")
Call sndPlaySound32(datName, 1)
'(datName, 0) wenn Programm erst nach Abspielen der Datei fortgesetzt werden
soll
For i = 1 To 10
Range("A" & i) = Range("A" & i) + 1
Next
End Sub

Gruß
stefan
Post by paddy
Hallo Excel-Profis!
Ich suche nach einer Möglichkeit, per VBA eine Sounddatei abzuspielen.
Soweit lässt sich dies recht einfach mit einer API-Funktion
realisieren. Ich möchte jedoch, dass folgender VBA-Code während dem
Ausgeben der WAV-Datei fliessend ausgeführt wird. Gemäss dem
Excel-Newsletter von SmartToolsPublishing vom 08.06.2004 sollte diese
////////////////////////////
Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" _
(ByVal lpszName As String, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Const SND_ASYNC As Long = &H1
Const SND_FILENAME As Long = &H20000
Const SND_PURGE As Long = &H40
Const SND_LOOP As Long = &H8
////////////////////////////
////////////////////////////
Sub SchleifeMitMusik ()
Dim i As Single, j As Double
Call PlaySound("C:\Sounds\Warten.wav", _
0, SND_FILENAME Or SND_ASYNC)
'hier lang andauernder Schleifendurchlauf
For i = 1 To 10000
j = i / 10000
Range("A1").Value = j 'Während die Sounddatei quasi im
Hintergrund
Next i 'abgespielt wird, soll in Zelle A1 das
Ergebnis
End Sub 'der Berechnung angezeigt werden...
////////////////////////////
Gemäss Newsletter soll die Konstante "SND_ASYNC" dafür verantwortlich
sein, dass die Datei im Hintergrund abgespielt wird, und folgender
VBA-Code sofort ausgeführt wird. Die Konstante "SND_FILENAME" muss
immer angegeben werden, wenn eine WAV-Datei ausgegeben werden soll.
Die beiden Konstanten werden durch ein logisches "Or" miteindander
verknüpft.
Soweit so gut! Bloss: Es funktioniert nicht!!! Während der Wiedergabe
der Sounddatei, ist die Ausführung des VBA-Codes blockiert. Der
restliche Code wird erst ausgeführt, nachdem das Musikstück
vollständig ausgegeben worden ist!!
Kennt hier jemand eine alternative Variante, mein Problem zu lösen?
Oder sieht jemand weshalb, dieses Funktionsgerüst nicht das tut, was
es eigentlich soll?? Habe ich etwas vergessen???
Vielen Dank für Eure Anregungen und Tipps!
Gruss
paddy
paddy
2004-11-14 19:09:18 UTC
Permalink
Hallo Stefan!

Vielen Dank für Deinen Tipp! Das war genau das was ich gesucht hatte!!
Ganz nach dem Motto "Wieso kompliziert, wenns auch einfach geht!" ;-)

Liebe Grüsse
paddy

_________________________________________________________
Post by Stefan Onken
hallo paddy,
bei mir gehts mit
Declare Function sndPlaySound32 Lib "winmm.dll" Alias _
"sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As
Long
Sub ton()
Dim datName
datName = Application.GetOpenFilename("Sounddatei(*.wav),*.wav")
Call sndPlaySound32(datName, 1)
'(datName, 0) wenn Programm erst nach Abspielen der Datei fortgesetzt werden
soll
For i = 1 To 10
Range("A" & i) = Range("A" & i) + 1
Next
End Sub
Gruß
stefan
Post by paddy
Hallo Excel-Profis!
Ich suche nach einer Möglichkeit, per VBA eine Sounddatei abzuspielen.
Soweit lässt sich dies recht einfach mit einer API-Funktion
realisieren. Ich möchte jedoch, dass folgender VBA-Code während dem
Ausgeben der WAV-Datei fliessend ausgeführt wird. Gemäss dem
Excel-Newsletter von SmartToolsPublishing vom 08.06.2004 sollte diese
////////////////////////////
Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" _
(ByVal lpszName As String, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Const SND_ASYNC As Long = &H1
Const SND_FILENAME As Long = &H20000
Const SND_PURGE As Long = &H40
Const SND_LOOP As Long = &H8
////////////////////////////
////////////////////////////
Sub SchleifeMitMusik ()
Dim i As Single, j As Double
Call PlaySound("C:\Sounds\Warten.wav", _
0, SND_FILENAME Or SND_ASYNC)
'hier lang andauernder Schleifendurchlauf
For i = 1 To 10000
j = i / 10000
Range("A1").Value = j 'Während die Sounddatei quasi im
Hintergrund
Next i 'abgespielt wird, soll in Zelle A1 das
Ergebnis
End Sub 'der Berechnung angezeigt werden...
////////////////////////////
Gemäss Newsletter soll die Konstante "SND_ASYNC" dafür verantwortlich
sein, dass die Datei im Hintergrund abgespielt wird, und folgender
VBA-Code sofort ausgeführt wird. Die Konstante "SND_FILENAME" muss
immer angegeben werden, wenn eine WAV-Datei ausgegeben werden soll.
Die beiden Konstanten werden durch ein logisches "Or" miteindander
verknüpft.
Soweit so gut! Bloss: Es funktioniert nicht!!! Während der Wiedergabe
der Sounddatei, ist die Ausführung des VBA-Codes blockiert. Der
restliche Code wird erst ausgeführt, nachdem das Musikstück
vollständig ausgegeben worden ist!!
Kennt hier jemand eine alternative Variante, mein Problem zu lösen?
Oder sieht jemand weshalb, dieses Funktionsgerüst nicht das tut, was
es eigentlich soll?? Habe ich etwas vergessen???
Vielen Dank für Eure Anregungen und Tipps!
Gruss
paddy
Loading...