Ich habe in meiner Musikdatenbank über 4000 Lieder enthalten. Dabei kann ich Lieder zum Abspielen auswählen. Die ausgewählten Lieder werden über eine Abfrage in einem Endlosformular aufgelistet. Mit einem Startbutton kann ich jetzt jedes einzelne Lied abspielen. Ich möchte aber gerne die ausgewählten Lieder automatisch alle hintereinander abspielen.
Die im Button verwendete Prozedur hat folgendes Aussehen:
Private Sub cmdStarten_Click()
Dim objMediaPlayer As WindowsMediaPlayer Set objMediaPlayer = Me.ctlMediaPlayer.Object
With objMediaPlayer Me!ctlMediaPlayer.URL = Me.Pfad End With
End Sub
Damit kann ich problemlos einzelne Lieder abspielen. Wie muss die Prozedur aussehen, damit die ausgewählten Lieder hintereinander abgespielt werden
das Problem ist, dass Office nicht so einfach mitbekommt, wann ein Lied zu Ende ist. Wenn Du in Deiner Liste die Laufzeit der Lieder hast, könntest Du in einer Schleife mit der API Sleep oder Application.Wait nach dem Start des Liedes bis zum nächsten warten und dann weiter machen. Das hätte allerdings den Haken, dass bei ungenauen Zeitangaben die Titel entweder abgehackt werden oder Pausen entstehen.
Ich hab so was bei mir in Excel umgesetzt und anders geregelt. Ich schreibe mir eine Playlist (m3u), und starte mit einem Shell-Befehl dann den Mediaplayer mit der Playlist.
Code:
Sub Play_M3U() 'Playlist abspielen 'Variablendeklarationen Dim strM3U$, m3u, strDrive$ 'Laufwerk aufnehmen strDrive = Split(ThisWorkbook.Path, "\")(0) 'Titelort für M3U zusammensetzen strM3U = strDrive & "\" & Format(Selection.Cells(1, 1).Row, "00000") & "_" & Split(Selection.Cells(1, 1).Value, "/")(0) & "_" & Format(Date, "YYYYMMDD") & "_" & Format(Now, "hhmm") & ".m3u" 'Textfile oeffnen Open strM3U For Output As #1 'Alle selektierten Zellen in M3U schreiben 'Schleife uebwer alle selektierten Zellen For Each Zellen In Selection 'Titel mit Laufwerk und Pfad eintragen Print #1, Replace(Cells(Zellen.Row, 1), "E:", strDrive) & Cells(Zellen.Row, 2) '& vbLf 'Ende Schleife uebwer alle selektierten Zellen Next 'Textfile schliessen Close #1 'windowsplayer mit Playlist starten m3u = Shell("C:\Program Files (x86)\Windows Media Player\wmplayer.exe " & _ " /Listadd """ & strM3U & "", vbNormalFocus) End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Deine Prozedur ist offenbar auf Excel zugeschnitten. Ich habe das Ganze aber in Access. Die Prozedur, die ich eingangs angeführt habe, funktioniert ja im Prinzip problemlos. Nur muss ich jedes einzelne Lied separat starten. Ich möchte nur, dass sich genau diese Prozedur sooft wiederholt als Lieder in der Abfrage ausgewählt wurden.
meine Access-Zeit liegt gut 25 Jahre zurück, daher kann ich nur noch mal meinen Ansatz wiederholen. Entweder Du gibst eine Playlist aus und spielst diese ab, oder Du musst eine Schleife über die Titel programmieren und dabei die Spieldauer verwenden. Hast Du die Spieldauer nicht in Deiner Tabelle, geht das nicht so einfach, da musst Du sie Dir vor dem Abspielen noch aus der Datei holen.
Wenn Du meinen code auf Deine Bedingungen anpasst, sollte es auch funktionieren.
Hier mal z.B. die Sache mit dem Titel und dem Pfad.
Du übergibst an den Mediaplayer den Pfad einschl Dateiname Me!ctlMediaPlayer.URL = Me.Pfad
Ich geb das Ding in eine m3u Print #1, Replace(Cells(Zellen.Row, 1), "E:", strDrive) & Cells(Zellen.Row, 2) '& vbLf
Bei Dir müsste die Zeile dann so aussehen: Print #1, Me.Pfad
Den Dateinamen für die Playlist mustt Du auch nicht so komplex wie ich machen:
Ich habe den Ablauf in der Datenbank und mein Problem im Anhang "Ablauf.pdf" dargestellt. Ich habe die ganze Datenbank an sich fertig und möchte sie gerne in Access behalten. Ich habe auch eine Vermutung wie das Ganze lösbar wäre, kann aber diese Vermutung nicht umsetzen, weil meine VBA Kenntnisse nicht soweit reichen.
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long )
In Deinem Makro verwendest Du das dann so:
Private Sub Befehl15_Click() Dim rs As DAO.Recordset Set rs = Me.RecordsetClone rs.MoveFirst Do While Not rs.EOF Me!ctlMediaPlayer.URL = rs!Pfad DoEvents sleep rs.MoveNext Loop End Sub
Wie steht denn Deine Titellänge in der Datenbank? Als String Min:Sek oder als Zahl in Sekunden oder ... ? Die Zeit müsstest Du noch in Millisekunden umrechnen. Das könnte im Prinzip so aussehen (bei Sekunden), wenn das Feld Länge heißen würde: rs!Länge * 1000
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Danke für Deinen Typ. Aber ich habe keine Ahnung, was Du mit Anfang des Moduls meinst. Ich habe kein Modul in dieser Datenbank, ich habe auch kein Makro. Ich habe lediglich im Abspielformular die angeführten Prozeduren.
31.03.2016, 14:20 (Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016, 14:43 von WillWissen.
Bearbeitungsgrund: @-Zeichen verfälscht.
)
Hallo Andre
Deine Hilfe ist mir sehr willkommen. Wenn Du damit einverstanden bist, könnte ich Dir folgenden Vorschlag machen. Du gibst mir Deine Mailadresse auf meinen Mail account h.prechtl[ät]aon.at und ich sende Dir einen die gesamte Datenbank, allerdings nur mit einigen wenigen Liedern. Würdest Du das machen ? Danke
Option Compare Database Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub cmdStarten_Click() 'Befehl15_Click() Dim rs As DAO.Recordset Set rs = Me.RecordsetClone rs.MoveFirst Do While Not rs.EOF Shell ("C:\Programme\Windows Media Player\wmplayer.exe" & " """ & rs!Pfad & """") DoEvents Stop Sleep rs!Länge_Millisek rs.MoveNext Loop End Sub
Ich habe hier mal einen Stop-Befehl drin, dadurch pausiert das Abspielen nach jedem Titel im Code. Man müsste sich hier noch was einfallen lassen, wie man das Abspielen unterbrechen kann. Du willst ja bestimmt nicht alle 4000 Titel nacheinander hören? Diese Variante hat übrigens auch noch den Nachteil, dass bei einem Abspielfehler dann eben über die Titellänger Stillschweigen herrscht Hatte ich hier beim 3. Titel.
Dein ursprünglicher Code basiert übrigens auf dem Mediaplayer-Control, da hab ich aber im Formular keins gefunden.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)