Hallo Excel VBA Experten,
ich habe eine funktionierende userForm, die Videos in einer Zufallsreihenfolge wiedergibt.
Mein noch nicht ungesetzter Wusch ist es, per CommandButton die Schleife zu beenden und das nächste Video wiederzugeben.
Ich habe mir vereinzelt von ChatGPT helfen lassen, bin aber gerade bei dem Thema auf noch kein funktionierendes Ergebnis gekommen.
Zum Aufbau des Codes: Im Tabellenblatt "Filme" sind die Videos gespeichert (z.B. C:\videos\video1.mp4). Der Code zählt die Anzahl der eingetragenen Zeilen und macht ein Array mit Wert False daraus. Hier beginnt die "Hauptschleife" For i = 1 To numRows (Anzahl Zeilen) Das entsprechende Video wird rausgesucht und abgespielt. Damit die gleiche Zufallszahl sich nicht wiederholt, wird der Array-Wert auf True gesetzt. Das Video wird jetzt abgespielt.
Mein Verständins gemäß sollte der Commandbutton einen Wert (True oder 1) erhalten. Damit soll die "Do"-Schleife beendet werden und zur "For i"-Schleife zurückkehren.
Meine Test und Logik ergeben, dass sich das so abspielen könnte (funktioniert aber noch nicht): Beim Klick auf den commandbutton wird die Variable "weiter" auf False gesetzt. Eine Do-while Schleife prüft den Status der Variable "weiter" und beendet die andere "Do"-Schleife.
Einfach wäre es den ganzen code zu starten aber dann wird wieder ein neues Array angelegt, und das soll eben nicht sein..
Hier noch der komplette Code:
Option Explicit
Dim randArray() As Boolean ' Array
Dim previousNum As Integer ' Benachbarte Zahl
Private Sub CommandButton1_Click()
Dim num As Integer
Dim i As Integer ' Zähler Hauptschleife (Anzahl Zeilen)
' zeilen in Tabelle2 ermitteln
Dim numRows As Integer ' Anzahl Zeilen in Tabelle2
numRows = Worksheets("Filme").UsedRange.Rows.Count
' Array Größe ändern in Anzahl Zeilen
ReDim randArray(numRows)
Randomize Time
' HAUPTSCHLEIFE
For i = 1 To numRows
' Zufallsnummer generieren
Do
num = Int((numRows * Rnd) + 1) ' Berechnet Zufallszahl
Loop Until randArray(num) = False And num > previousNum ' loop solange Array(num) = False, so entsteht keine doppelte Zahl
randArray(num) = True ' Diese Zufallszahl auf True setzen, dann überspringt sie der Zufallsgenerator
previousNum = num ' so ist die letzte Zufallszahl nicht möglich
TextBox1.Value = num
' Dateiname raussuchen
Dim filename As String
filename = ThisWorkbook.Sheets("Filme").Cells(num, 1).Value
TextBox2.Value = filename
Debug.Print "Nr.: " & num & " " & filename
WindowsMediaPlayer1.Url = filename
Do While WindowsMediaPlayer1.playState = wmppsUndefined
DoEvents
Loop
Do While WindowsMediaPlayer1.playState > wmppsStopped
DoEvents
Loop
Next i
End Sub