HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
daniel
19.06.2026 16:17:02
AW: Sprachausgabe in Excel
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
Als Antwort auf diesen Beitrag
UdPa
19.06.2026 06:19:12
AW: Sprachausgabe in Excel
entschuldigung falschen code gepostet: Hier ist der Sprachcode

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

Set ws = Sheets("Spielerliste")
Set s = CreateObject("SAPI.SpVoice")

s.Speak "", 2
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
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."
Sleep 400
ElseIf Not damenVorhanden And herrenVorhanden Then
s.Speak "Es wird ein Herren oder Mixed Turnier gespielt."
Sleep 400
End If

' ===========================
' ===== STARTMELDUNG ========
' ===========================
s.Speak "Achtung! Es werden alle gemeldeten Spieler vorgelesen."
Sleep 500

' ===========================
' ===== HERREN VORLESEN =====
' ===========================
If herrenVorhanden Then

If damenVorhanden Then
' 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
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."
Sleep 300
End If

r = 2
nameD = ws.Cells(r, 8).Text

Do While nameD <> ""
s.Speak 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."
ElseIf countH > 0 Then
s.Speak "Es sind " & countH & " Herren gemeldet."
ElseIf countD > 0 Then
s.Speak "Es sind " & countD & " Damen gemeldet."
End If

End Sub
Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.