Excel VBA Programm spielt MP3 oder WAV Datei ab

Ich habe mich mit VBA nicht befasst, möchte aber einer kranken Person helfen, die zu vorgegebenen Zeitpunkten eine gesprochene Meldung bekommen muss. Statt einer Hardwarelösung mit Endlosband oder Voicerecorder möchte ich es unter Excel realisieren. Kann mir jemand ein VBA-Muster zeigen das etwa folgendes macht:

Uhrzeit vergleichen, wenn Uhrzeit gleich einer Sollzeit (Wert in einer Zelle, resp. Werte in einer Spalte) ist, wird die WAV-Datei ein Mal abgespielt. Dann wieder Uhrzeit vergleichen…(loop forever)

Es sollten verschiedene Uhrzeiten mit verschiedenen dazugehörigen WAVs möglich sein. Die Excel-Version ist noch nicht bekannt.
Es handelt sich um eine ehrenamtliche Tätigkeit, ohne kommerziellen Hintergrund. Vielen Dank für die Hilfe.

Hallo,

erst mal grundsätzlich: Ja, das geht. Wenn man etwas Erfahrung mit Excel-VBA hat ist das auch nicht besonders schwierig. Leider habe ich diese Erfahrung mit VBA nicht, ich verwende VB6.

Der Weg, wie der Sound am Besten abzuspielen ist, sieht so aus:

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND\_ASYNC = &H1
Const SND\_NODEFAULT = &H2

'...

sndPlaySound "C:\Klang.wav", SND\_ASYNC Or SND\_NODEFAULT

Eventuell hilft das ja den Excel-Experten.

Gruß Rainer

Uhrzeit vergleichen, wenn Uhrzeit gleich einer Sollzeit (Wert
in einer Zelle, resp. Werte in einer Spalte) ist, wird die
WAV-Datei ein Mal abgespielt. Dann wieder Uhrzeit
vergleichen…(loop forever)
Es sollten verschiedene Uhrzeiten mit verschiedenen
dazugehörigen WAVs möglich sein. Die Excel-Version ist noch
nicht bekannt.

Hi Tony,

bastle mal so eine Tabelle, Spalte A muß als Text formatiert sein!

Tabellenblatt: [Mappe2]!Tabelle1
 │ A │ B │ C │
──┼───────┼─────────────┼─────────────────────────┤
1 │ Zeit │ Datei │ Pfad │
──┼───────┼─────────────┼─────────────────────────┤
2 │ 10:53 │ testsnd.wav │ C:\programme\netmeeting │
──┼───────┼─────────────┼─────────────────────────┤
3 │ 10:54 │ testsnd.wav │ C:\programme\netmeeting │
──┼───────┼─────────────┼─────────────────────────┤
4 │ 10:55 │ testsnd.wav │ C:\programme\netmeeting │
──┼───────┼─────────────┼─────────────────────────┤
5 │ 10:56 │ testsnd.wav │ C:\programme\netmeeting │
──┴───────┴─────────────┴─────────────────────────┘
Zahlenformate der Zellen im gewählten Bereich:
A1:A5
haben das Zahlenformat: Text
B1:B5,C1:C5
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Dann Alt+F11, Im Vb-Editor Einfügen Modul, in das Modulfeld kopierst du diesen Code, ggfs. den Blattnamen, hier Tabelle1, anpassen.

Option Explicit
'
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND\_ASYNC = &H1
Const SND\_NODEFAULT = &H2
'
Sub Spielen()
Dim Datei As String, Zei As Long
With Worksheets("Tabelle1")
 Zei = Application.WorksheetFunction.Match(CStr(Format(Now, "hh:mm")), .Columns(1), 1)
 Datei = .Cells(Zei, 3) & "\" & .Cells(Zei, 2)
 sndPlaySound Datei, SND\_ASYNC Or SND\_NODEFAULT
End With
End Sub

Dann Doppelklick auf „Diese Arbeitsmappe“, dorthinein diesen Code kopieren:

Option Explicit
'
Private Sub Workbook\_Open()
Dim Zei As Long, Zeit
With Worksheets("Tabelle1")
 For Zei = 2 To .Range("A" & Rows.Count).End(xlUp).Row
 Application.OnTime TimeValue(CDate(.Cells(Zei, 1))), "Spielen"
 Next Zei
End With
End Sub

Danach kannst du den Editor schließen.

Zum Verständnis, mit der Prozedur von „Workbooks_Open“ wird die Tabelle, letztlich nur die Zeiten in Spalte A beim Starten von Excel eingelesen und Vba merkt die sich und weiß dann zu welchen Zeiten es die Prozedur „Spielen“ ausführen soll.

Die Prozedur "Spielen sucht dann wenn sie gestartet wird die aktuelle Zeit in A und spielt dann die Datei die in Spalte B steht und deren Pfad in Spalte C steht, ab.

Worauf ich hinaus will ist, wenn du Eintragungen in den Spalten A,B,C eingibst so passiert da erstmal nix, weil Vba weiß in dem Moment nichts von neuen/anderen Zeiten in A.

Also nach Änderungen in der Tabelle, die Datei schließen und neu öffnen.
Alternativ, wieder mit Alt+F11 den Editor öffnen, Doppelkick auf „DieseArbeitsmappe“, den Curser irgendwo in den Code der „Workbook_Open“-Prozedur stellen und F5 drücken.
Dann sind auch die neuen zeiten „eingelesen“

Übe halt mal mit einer Testdatei, wenns wo hängt, frag halt nach.

Gestet mit wav-Datei unter Excel2000, müßte aber auch in höheren Versionen laufen. Gib bei Rückfragen bitte deine Version an.

Gruß
Reinhard

Danke dir, erspart mir Googeln :smile: Gruß o.w.T.

Lieber Reinhard und Rainer.
Ganz herzlichen Dank für eure wertvolle Hilfe. Werde heute Abend damit arbeiten!
LG Tony

Hallo Reinhard
Dank deiner Hilfe brachte ich es zum Laufen - im Hintergrund tönt es schon!
Im Endausbau wird es ein Stück Lebensverbesserung für eine Alzheimerpatientin sein.
Herzlichen Dank auch für die direkte Hilfestellung.
LG Tony