Sound

Die hier gezeigten Funktionen beziehen sich auf Systemklänge. Das Abspielen beliebiger Sounddateien, wie z. B. MP3 oder WAV, ist mit ShellExecute möglich.

Beep

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 a1, lngViertel 'Freu Beep a1, lngViertel 'de Beep h1, lngViertel 'schö Beep c2, lngViertel 'ner Beep c2, lngViertel 'Göt Beep h1, lngViertel 'ter Beep a1, lngViertel 'fun Beep f1, lngViertel 'ken Beep e1, lngViertel 'Freu Beep e1, lngViertel 'de Beep f1, lngViertel 'aus Beep g1, lngViertel 'E Beep g1, lngViertel * 1.5 'ly Beep f1, lngViertel / 2 'si Beep f1, lngViertel * 2 'um End Sub

MessageBeep

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