Die hier gezeigten Funktionen beziehen sich auf Systemklänge. Das Abspielen beliebiger Sounddateien, wie z. B. MP3 oder WAV, ist mit ShellExecute möglich.
VBA bringt von Haus aus die VBA-Prozedur Beep
mit. Das Problem:
Sie bewirkt nichts.
Das hat mit der langen, wechselhaften Entwicklung zu tun, wie Sounds auf Computern
abgespielt werden können. Beep
stammt nämlich noch aus der Frühzeit
des Computers, als es noch nicht üblich war, in einem Computer eine Soundkarte
einzubauen. Mit dem Aufkommen von Soundkarten sollte das interne Piepsen des PCs
abgeschafft werden und zwischenzeitlich wurde Beep
auch auf API-Ebene
einfach deaktiviert, aber schon bald wieder eingeführt. Nur eben nicht in VBA.
Als API-Funktion ist Beep
jedenfalls längst wieder möglich. Die
folgende Beispielfunktion zeigt aber auch einen Nachteil von Beep
auf:
Solange ein Ton abgespielt wird, wartet die Anwendung.
#If VBA7 Then Public Declare PtrSafe Function Beep Lib "kernel32" _ (ByVal dwFreq As Long, ByVal dwDuration As Long) As Boolean 'dwFreq zwischen 37 und 32767 #Else Public Declare Function Beep Lib "kernel32" _ (ByVal dwFreq As Long, ByVal dwDuration As Long) As Boolean #End If
Public Sub demoGötterfunken() 'Frequenzen: Tonleiter für 2 Oktaven Const c1 = 262, d1 = 294, e1 = 330, f1 = 349, g1 = 392, a1 = 440, h1 = 494 Const c2 = 523, d2 = 587, e2 = 659, f2 = 698, g2 = 784, a2 = 880, h2 = 988 Dim lngViertel As Long lngViertel = 500 'Länge einer Viertelnote in ms Beep e1, lngViertel 'Freu Beep e1, lngViertel 'de Beep f1, lngViertel 'schö Beep g1, lngViertel 'ner Beep g1, lngViertel 'Göt Beep f1, lngViertel 'ter Beep e1, lngViertel 'fun Beep d1, lngViertel 'ken Beep c1, lngViertel 'Freu Beep c1, lngViertel 'de Beep d1, lngViertel 'aus Beep e1, lngViertel 'E Beep e1, lngViertel * 1.5 'ly Beep d1, lngViertel / 2 'si Beep d1, lngViertel * 2 'um End Sub
Spielt einen Ton ab, in Abhängigkeit vom Soundschema, das der User in den Systemeinstellungen ausgewählt hat. Die Anwendung läuft weiter, ohne das Abspielen des Tons abzuwarten.
#If VBA7 Then Public Declare PtrSafe Function MessageBeep Lib "user32" _ (ByVal uType As eType) As Boolean #Else Public Declare Function MessageBeep Lib "user32" _ (ByVal uType As eType) As Boolean #End If Public Enum eType MB_OK = 0 'Standard Sound MB_ICONERROR = &H10 'Kritischer Stop MB_ICONQUESTION = &H20 'Frage MB_ICONWARNING = &H30 'Warnung MB_ICONINFORMATION = &H40 'Information End Enum