Excel: Wie gestalte ich dieses Makro schneller und effektiver und sorge dafür, dass es bei Neustart nur neue Werte erkennt?
Wie kann ich dieses Makro schneller und effektiver machen und wie bekomme ich es hin, dass es beim Neustart nicht schon wieder die Werte erkennt, die schon einmal dran waren? Sodass die 50 nach dem ersten Mal Abspielen des Sounds ignoriert wird.
Code:
Sub PlaySound()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim goals As Long
Dim soundFile As String
Dim thresholds As Variant
Dim i As Integer
Set ws = ThisWorkbook.Worksheets("Spielplan")
Set rng = ws.Range("O1:O" & ws.Cells(ws.Rows.Count, "O").End(xlUp).row)
soundFile = "Sound_pfad.mp3"
'Array of threshold values
thresholds = Array(50, 100, 150, 200, 250, 300, 350, 400, 450, 500,550,600,650,700,750,800,850,900,950,1000)
Do While True 'Endlosschleife hinzugefügt
For Each cell In rng
If IsNumeric(cell.Value) Then
goals = goals + cell.Value
'Check if goals is equal to any of the threshold values
For i = LBound(thresholds) To UBound(thresholds)
If goals = thresholds(i) Then
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.OLEObjects.Add(Filename:=soundFile, Link:=False, DisplayAsIcon:=False).Select
Selection.Verb Verb:=xlPrimary
Selection.Delete
Application.ScreenUpdating = True
Application.EnableEvents = True
End If
Next i
End If
Next cell
'Verzögerung hinzugefügt, um die CPU-Auslastung zu reduzieren
Application.Wait (Now + TimeValue("0:05:00"))
Loop
End Sub
3 Antworten
Den Sound nur EINMAL laden und dann diesen bereits geladenen immer wieder abspielen. Den Sound besser mit dem Multimedia Object -immer wieder- abspielen.
Public Sub myTest()
Dim Player As WMPLib.WindowsMediaPlayer
Player = New WMPLib.WindowsMediaPlayer
Player.URL = "C:\temp.mp3"
Player.controls.play()
End sub
'Ist die URL geladen dann über play, stop die Dinge beeinflussen.
Was ist denn dein Ziel?
Wahrscheinlich ist Dein eigentliches Ziel, dass ein Ton abgespielt wird, wenn sich ein Zellenwert auf ein Vielfaches von 50 ändert.
Dazu musst Du einen Eventhandler schreiben, der ausgelöst wird, wenn sich ein Zellwert auf eine Zahl x ändert, bei der x mod 50 = 0
Es gibt so einen Eventhandler. Ich denke, der heißt CellChanged oder so. Suche mal in der Dokumentation.
Die Prüfung auf ein Vielfaches von 50 machst Du natürlich im Event Handler.
Lösch doch die 50 nach dem Abspielen aus dem Array oder noch einfach, setz den Wert bei 50 auf -1.
If goals = thresholds(i) Then
threasholds(i) = -1
...
Hm okay und wie setze ich das im Code um ?