Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
... bei mir werden auch mit Deinem Code die Sounds unvollständig wiedergegeben. Ich wollte das jetzt mal aufzeichnen, aber seltsamerweise wurde bei der Aufzeichnung alles vorgelesen. Bei anschließender Wiederholung ohne Aufzeichnung wurde mehr vorgelesen als vor der Aufzeichnung, aber wieder nicht alles ...
Das System friert bei mir nicht ein. Es hat nur einen kurzen "Nachlauf". Abbrechen kann ich im VBA-Editor mit STRG+Pause
Hier mal ein Code, wie er bei mir funktioniert. Ich habe dazu das Sprechen in eine Function ausgelagert. Änderungen was Ersetzungen oder Löschungen im Makro Spielerlisten_Ansage betrifft, erkennt man an der Auskommentierung an erster Position der jeweiligen Zeile. EIn paar Pausen habe ich dadurch auch in die Function ausgelagert. Ob die anderen in der Länge oder überhaupt erforderlich sind, sei dahingestellt. Die 2500ms als breaktime funktionieren bei mir ganz gut und müssen ggf. je nach Gegebenheiten angepasst werden.
Sub Spielerlisten_Ansage()
Dim s As Object
Dim ws As Worksheet
Dim r As Long
Dim nameH As String, nameD As String
Dim countH As Long, countD As Long
Dim herrenVorhanden As Boolean, damenVorhanden As Boolean
Dim sSpeak As String
Set ws = Sheets("Spielerliste")
Set s = CreateObject("SAPI.SpVoice")
s.Speak "", 2
Sprechen ". . . "
Sleep 300
' ===========================
' ===== TURNIERART CHECK ====
' ===========================
nameH = ws.Cells(2, 2).Text ' Herren B2
nameD = ws.Cells(2, 8).Text ' Damen H2
herrenVorhanden = (nameH <> "")
damenVorhanden = (nameD <> "")
If Not herrenVorhanden And Not damenVorhanden Then Sprechen "Es sind keine Spieler gemeldet.": Exit Sub
' s.Speak "Es sind keine Spieler gemeldet."
' Exit Sub
' End If
If Not herrenVorhanden And damenVorhanden Then
' s.Speak "Es wird ein reines Damenturnier gespielt."
sSpeak = "Es wird ein reines Damenturnier gespielt."
' Sleep 400
ElseIf Not damenVorhanden And herrenVorhanden Then
' s.Speak "Es wird ein Herren oder Mixed Turnier gespielt."
sSpeak = "Es wird ein Herren oder Mixed Turnier gespielt."
' Sleep 400
End If
Sprechen sSpeak
' ===========================
' ===== STARTMELDUNG ========
' ===========================
' s.Speak "Achtung! Es werden alle gemeldeten Spieler vorgelesen."
Sprechen "Achtung! Es werden alle gemeldeten Spieler vorgelesen."
Sleep 500
' ===========================
' ===== HERREN VORLESEN =====
' ===========================
If herrenVorhanden Then
If damenVorhanden Then Sprechen "Ich beginne mit den Herren."
' Nur sagen, wenn beide vorhanden
' s.Speak "Ich beginne mit den Herren."
' Sleep 300
' End If
r = 2
nameH = ws.Cells(r, 2).Text
Do While nameH <> ""
' s.Speak nameH
Sprechen nameH
countH = countH + 1
' Sleep 200
r = r + 1
nameH = ws.Cells(r, 2).Text
Loop
' Sleep 400
End If
' ===========================
' ===== DAMEN VORLESEN ======
' ===========================
If damenVorhanden Then
If herrenVorhanden Then
' Nur sagen, wenn beide vorhanden
' s.Speak "Nun folgen die Damen."
Sprechen "Nun folgen die Damen."
Sleep 300
End If
r = 2
nameD = ws.Cells(r, 8).Text
Do While nameD <> ""
' s.Speak nameD
Sprechen nameD
countD = countD + 1
' Sleep 200
r = r + 1
nameD = ws.Cells(r, 8).Text
Loop
Sleep 400
End If
' ===========================
' ===== ABSCHLUSSANSAGE =====
' ===========================
If countH > 0 And countD > 0 Then
' s.Speak "Es sind " & countH & " Herren und " & countD & " Damen gemeldet."
sSpeak = "Es sind " & countH & " Herren und " & countD & " Damen gemeldet."
ElseIf countH > 0 Then
' s.Speak "Es sind " & countH & " Herren gemeldet."
sSpeak = "Es sind " & countH & " Herren gemeldet."
ElseIf countD > 0 Then
' s.Speak "Es sind " & countD & " Damen gemeldet."
sSpeak = "Es sind " & countD & " Damen gemeldet."
End If
Sprechen sSpeak
End Sub
Private Function Sprechen(ByVal sText As String)
Static spr As Object
Const SVSFIsXML As Long = 8
If spr Is Nothing Then
Set spr = CreateObject("SAPI.SpVoice")
End If
sText = "" & _
"" & sText & _
""
spr.Speak sText, 8
DoEvents
Sleep 200
End Function