Als Antwort auf diesen Beitrag
Hi
um sie Sache zu vereinfachen, sollest du erstmal den gesamten zu sprechenden Text in einer Variablen sammeln und die Sprachausgabe am Schluss durchführen.
dann hast du nur eine Stelle mit der Sprachausgabe und du kannst auch noch eine Abfrage einbauen, ob wirklich gesprochen werden soll, und du kannst den Text als ganzes in einem Befehl ausgeben.
wenn du den Text trotzdem zwischendrin unterbrechen willst, dann kannst du ihn auch Zeilenweise sprechen lassen und in der Schleife die Prüfung auf Abbruch einbauen.
ich habe es hier so gelöst, dass du einen ActiveX-Button hast, über den du mit der Maus wischen musst, um abzubrechen.
Das vereinfacht es, den richtigen Zeitpunkt zu erwischen.
hier der gesamte vereinfachte Code für das makro im Modul 1
Option Explicit
Public Abbruch As Boolean
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 txt As String, t
Set ws = Sheets("Spielerliste")
' ===========================
' ===== 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
txt = txt & vbLf & "Es sind keine Spieler gemeldet."
Exit Sub
End If
If Not herrenVorhanden And damenVorhanden Then
txt = txt & vbLf & "Es wird ein reines Damenturnier gespielt."
ElseIf Not damenVorhanden And herrenVorhanden Then
txt = txt & vbLf & "Es wird ein Herren oder Mixed Turnier gespielt."
End If
' ===========================
' ===== STARTMELDUNG ========
' ===========================
txt = txt & vbLf & "Achtung! Es werden alle gemeldeten Spieler vorgelesen."
'Sleep 500
' ===========================
' ===== HERREN VORLESEN =====
' ===========================
If herrenVorhanden Then
If damenVorhanden Then
' Nur sagen, wenn beide vorhanden
txt = txt & vbLf & "Ich beginne mit den Herren."
End If
r = 2
nameH = ws.Cells(r, 2).Text
Do While nameH <> ""
txt = txt & vbLf & nameH
countH = countH + 1
r = r + 1
nameH = ws.Cells(r, 2).Text
Loop
End If
' ===========================
' ===== DAMEN VORLESEN ======
' ===========================
If damenVorhanden Then
If herrenVorhanden Then
' Nur sagen, wenn beide vorhanden
txt = txt & vbLf & "Nun folgen die Damen."
End If
r = 2
nameD = ws.Cells(r, 8).Text
Do While nameD <> ""
txt = txt & vbLf & nameD
countD = countD + 1
r = r + 1
nameD = ws.Cells(r, 8).Text
Loop
End If
' ===========================
' ===== ABSCHLUSSANSAGE =====
' ===========================
If countH > 0 And countD > 0 Then
txt = txt & vbLf & "Es sind " & countH & " Herren und " & countD & " Damen gemeldet."
ElseIf countH > 0 Then
txt = txt & vbLf & "Es sind " & countH & " Herren gemeldet."
ElseIf countD > 0 Then
txt = txt & vbLf & "Es sind " & countD & " Damen gemeldet."
End If
'=====================
'=== Sprachausgabe ===
'=====================
If MsgBox(txt, vbYesNo, "Ansage sprechen") = vbYes Then
For Each t In Split(txt, vbLf)
DoEvents
If Abbruch Then Exit For
Application.Speech.Speak t
DoEvents
Next
End If
Abbruch = False
End Sub
dann musst du auf dem Tabellenblatt einen ActiveX-Commandbutton anlegen mit diesem Code:
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Abbruch = True
End Sub
wie gesagt, zu Abbrechen einfach mit der Maus über den Button fahren.
hier in der Datei:
https://www.herber.de/bbs/user/180831.xlsm
Gruß Daniel