HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv

Beiträge zum Thread: Sprachausgabe in Excel

UdPa
18.06.2026 18:46:11
Sprachausgabe in Excel
Robert Pilz
18.06.2026 19:55:54
AW: Sprachausgabe in Excel
UdPa
18.06.2026 20:20:45
AW: Sprachausgabe in Excel
daniel
18.06.2026 22:46:28
AW: Sprachausgabe in Excel
UdPa
19.06.2026 06:19:12
AW: Sprachausgabe in Excel
daniel
19.06.2026 16:17:02
AW: Sprachausgabe in Excel
UdPa
19.06.2026 16:32:27
AW: Sprachausgabe in Excel
daniel
19.06.2026 16:36:42
AW: Sprachausgabe in Excel
UdPa
19.06.2026 16:42:06
AW: Sprachausgabe in Excel
daniel
19.06.2026 17:00:37
AW: Sprachausgabe in Excel
UdPa
19.06.2026 17:05:18
AW: Sprachausgabe in Excel
daniel
19.06.2026 17:31:04
AW: Sprachausgabe in Excel
UdPa
19.06.2026 17:46:04
AW: Sprachausgabe in Excel
UdPa
19.06.2026 17:48:51
AW: Sprachausgabe in Excel
daniel
19.06.2026 18:53:34
AW: Sprachausgabe in Excel
Udo
19.06.2026 19:55:43
AW: Sprachausgabe in Excel
daniel
19.06.2026 20:23:14
AW: Sprachausgabe in Excel
schauan
19.06.2026 22:57:35
AW: Sprachausgabe in Excel
Udo
20.06.2026 07:06:41
AW: Sprachausgabe in Excel
Udo
20.06.2026 07:42:34
AW: Sprachausgabe in Excel
Alwin Weisangler
20.06.2026 10:37:56
AW: Sprachausgabe in Excel
Alwin Weisangler
20.06.2026 16:05:04
AW: Sprachausgabe in Excel
Udo
20.06.2026 19:47:42
AW: Sprachausgabe in Excel
Udo
20.06.2026 19:50:14
AW: Sprachausgabe in Excel
Alwin Weisangler
20.06.2026 23:05:21
AW: Sprachausgabe in Excel
Udo
20.06.2026 19:26:28
AW: Sprachausgabe in Excel
schauan
20.06.2026 14:13:40
AW: Sprachausgabe in Excel
Udo
20.06.2026 19:42:22
AW: Sprachausgabe in Excel
Daniel
20.06.2026 17:16:35
AW: Sprachausgabe in Excel
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
UdPa
18.06.2026 18:46:11
Sprachausgabe in Excel
Hallo Experten ich hab für mein Turnierprogramm mithilfe der KI einen Code bekommen der mir namen aus mainer spielerliste vorliest. Das klappt eigentlich recht gut, mein Problem es friert während der ansage mein excel ein und ich kann den code nicht stoppen. Frage an euch kann man da irgendwas einbauen das man z.B mit F12 sofort den Code unterbricht. Mit der KI hab ich keine Lösung gefunden. Vielleicht gibts da ja eine möglichkeit. Vielen Dank für eure Hilfe hier der Code Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim BereichB As Range, BereichH As Range
Dim istRelevant As Boolean

' Prüfen, ob Änderung in Spalte B oder H
If Intersect(Target, Union(Me.Columns("B"), Me.Columns("H"))) Is Nothing Then Exit Sub

Application.EnableEvents = False

For Each Zelle In Target
istRelevant = False

' Spalte B prüfen
If Zelle.Column = 2 Then
Set BereichB = Me.Columns("B")
If Application.WorksheetFunction.CountIf(BereichB, Zelle.Value) > 1 Then
MsgBox "Der Name '" & Zelle.Value & "' ist in Spalte B bereits vorhanden!", vbExclamation
Zelle.ClearContents
End If
istRelevant = True

' Spalte H prüfen
ElseIf Zelle.Column = 8 Then
Set BereichH = Me.Columns("H")
If Application.WorksheetFunction.CountIf(BereichH, Zelle.Value) > 1 Then
MsgBox "Der Name '" & Zelle.Value & "' ist in Spalte H bereits vorhanden!", vbExclamation
Zelle.ClearContents
End If
istRelevant = True
End If

' Wenn relevant und nicht leer → Spieler hinzufügen
If istRelevant Then
If Trim(Zelle.Value) <> "" Then
SpielerHinzufuegen CStr(Zelle.Value)
End If
End If
Next Zelle

Application.EnableEvents = True
End Sub
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Robert Pilz
18.06.2026 19:55:54
AW: Sprachausgabe in Excel
Ja, das geht grundsätzlich. Das Problem liegt meist nicht in Worksheet_Change, sondern in der Prozedur SpielerHinzufuegen, insbesondere wenn dort die Sprachausgabe (SAPI.SpVoice) mit Speak verwendet wird. Während Excel auf die Ansage wartet, reagiert es oft nicht mehr.

Möglichkeit 1: ESC zum Abbrechen zulassen

Wenn deine Ansage in einer Schleife läuft, kannst du regelmäßig DoEvents einbauen:

DoEvents
If Abbruch = True Then Exit Sub

Dadurch verarbeitet Excel Tastatureingaben wieder.

Möglichkeit 2: F12 als Not-Aus-Schalter

Lege in einem normalen Modul an:

Public Abbruch As Boolean

Sub NotAus()
Abbruch = True
End Sub

Beim Start der Arbeitsmappe:

Private Sub Workbook_Open()
Application.OnKey "{F12}", "NotAus"
End Sub

Vor dem Start einer Ansage:

Abbruch = False

Und in längeren Schleifen:

DoEvents

If Abbruch Then
MsgBox "Ansage abgebrochen!"
Exit Sub
End If
Möglichkeit 3: STRG+PAUSE

Bei VBA kann man oft mit Strg + Pause/Untbr einen laufenden Code anhalten. Das funktioniert aber nicht immer bei Sprachausgaben oder API-Aufrufen.

Möglichkeit 4: Sprachausgabe asynchron starten

Falls du so etwas verwendest:

voice.Speak Text

blockiert Excel bis die Ansage fertig ist.

Besser:

voice.Speak Text, 1

Die 1 entspricht SVSFlagsAsync.

Dadurch läuft die Ansage im Hintergrund weiter und Excel bleibt bedienbar.

Um dir die beste Lösung zu geben, bräuchte ich den Code der Prozedur:

SpielerHinzufuegen

Dort sitzt sehr wahrscheinlich die eigentliche Ursache für das Einfrieren.
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
UdPa
18.06.2026 20:20:45
AW: Sprachausgabe in Excel
Es gibt keinen anderen Code der code soll einfach die spielerliste von B2 bzw. H2 vorlesen, ich möchte lediglich die müglich keit dies auch abbrechen zu können
LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
daniel
18.06.2026 22:46:28
AW: Sprachausgabe in Excel
Hi
dieser Code liest nichts vor.
dieser Code überprüft lediglich, ob ein Name, den du in Spalte B oder H eingibst, schon vorhanden oder neu ist und soll verhindern, dass du einen Namen doppelt eingibst.
ein Vorlesen findet hier nicht statt.
Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
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
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
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
UdPa
19.06.2026 16:32:27
AW: Sprachausgabe in Excel
Vielen lieben dank für deine mühe ja so hätt ich mir das vorgestellt, ich hab deine datei heruntergeladen, bei mir spricht sie leider nicht.
LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
daniel
19.06.2026 16:36:42
AW: Sprachausgabe in Excel
Hi
dann füge bei der Dimendionierung wieder das hier ein:

Set s = CreateObject("SAPI.SpVoice")

und ersetzte am Ende das Application.Speech.Speak durch s.Speak

gruß Daniel

Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
UdPa
19.06.2026 16:42:06
AW: Sprachausgabe in Excel
Lieben Dank

Aber jetzt versteh ich leider nur mehr Bahnhof

LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
daniel
19.06.2026 17:00:37
AW: Sprachausgabe in Excel
ach je, mal wieder KI = Betreuung auf Kindergartenniveau.
dann halt der ganze Code zum kopieren und einfügen nochmal für dich
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")
Set s = CreateObject("SAPI.SpVoice")


' ===========================
' ===== 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
s.Speak t
DoEvents
Next
End If
Abbruch = False
End Sub
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
UdPa
19.06.2026 17:05:18
AW: Sprachausgabe in Excel
Sorry du hast sicher recht, aber wenn man keine Ahnung davon hat oder nur ganz wenig wird es für euch Profis als Kindergarten abgekänzelt. Zu Recht natürlich, aber wenn ich eine Lösung hätte hätt ich mich nicht an euch gewand. Entschuldige wenn es für dich ein Kindergartenspiel ist. Dennoch danke ich dir für deine Mühe, aber ich muss dir leider sagen das es noch immer nicht spricht



LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
daniel
19.06.2026 17:31:04
AW: Sprachausgabe in Excel
naja, Kindergarten ist, wenn ich sage:
ersetze in deinem Code den Text "aaa" durch den Text "bbb"
und dann jemand nicht versteht, was er dann tun soll
Denn ich denke, das ist eine einfache Anweisung ist, die ein Grundschüler ausführen können sollte.

Früjer war es so, dass wenn jemand zu seinem selbst geschriebenen Code eine Frage hatte, dann war es meistens einfach zu helfen, weil man dann vielleicht nur ein paar Anweisungen und Tipps geben muss, die der Fragesteller selber umsetzen kann, weil er verstanden hatte, was der da gemacht hat.
Seit KI kommt es immer häufiger vor, dass die Fragesteller ihre eigenen Codes nicht mehr verstehen (hat ja die KI geschrieben) und dann muss man jede Änderung quasi Buchstabe für Buchstabe vormachen, und das ist dann meistens viel aufwendiger, als einen Hinweis zu geben.

Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
UdPa
19.06.2026 17:46:04
AW: Sprachausgabe in Excel
Danke dir
Nur spricht die datei nicht soviel mal dazu.

LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
UdPa
19.06.2026 17:48:51
AW: Sprachausgabe in Excel
Es sollte ja eigentlich so sein wenn eine Datei bereitgestellt wird das sie auch auf jeden PC mit Excel funktionieren sollte.
Aber ich Danke dir für deine Zeit.
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
daniel
19.06.2026 18:53:34
AW: Sprachausgabe in Excel
naja, bei mir spricht die Datei.
Da ich deinen PC nicht kenne, kann ich sie nicht auf deinem PC testen.
ich kann höchsten versuchen, die Excelversion, die du angegeben hast, zu berücksichtigen.
ich habe auch Excel 365, so wie du, allerdings professionell und nicht private, aber das sollte hier nicht das Problem sein.
bei mir funktionieren beide varianten, hast du beide getestet?
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Udo
19.06.2026 19:55:43
AW: Sprachausgabe in Excel
Ja hab beide getestet, leider beide keine Sprachausgabe.

LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
daniel
19.06.2026 20:23:14
AW: Sprachausgabe in Excel
dann musst du mal prüfen, was deinen Rechner von meinem Rechner unterscheidet, oder was du anders gemacht hast als ich.
wie gesagt, bei mir geht es, die Excelversion sollte passen
https://www.herber.de/bbs/user/180832.zip
mehr kann ich nicht tun
du könntest mir höchsten nochmal deine Datei schicken, dann kann ich schauen, ob da irgendwas anders ist als bei mir.

Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
schauan
19.06.2026 22:57:35
AW: Sprachausgabe in Excel
... bei mir wird viel verschluckt... Besser geht es bei mir mit einigen Schleifchen nach den einzelnen Sprachausgaben:


Option Explicit

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

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.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
Exit Sub
End If

If Not herrenVorhanden And damenVorhanden Then
s.Speak "Es wird ein reines Damenturnier gespielt.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
Sleep 400
ElseIf Not damenVorhanden And herrenVorhanden Then
s.Speak "Es wird ein Herren oder Mixed Turnier gespielt.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
Sleep 400
End If

' ===========================
' ===== STARTMELDUNG ========
' ===========================
s.Speak "Achtung! Es werden alle gemeldeten Spieler vorgelesen.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
Sleep 200

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

If damenVorhanden Then
' Nur sagen, wenn beide vorhanden
s.Speak "Ich beginne mit den Herren.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
End If

r = 2
nameH = ws.Cells(r, 2).Text

Do While nameH <> ""
Debug.Print nameH
s.Speak nameH, 1
Do While s.Status.RunningState = 2
DoEvents
Loop
countH = countH + 1
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.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
End If

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

Do While nameD <> ""
s.Speak nameD, 1
Do While s.Status.RunningState = 2
DoEvents
Loop
countD = countD + 1
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.,1"
Do While s.Status.RunningState = 2
DoEvents
Loop
ElseIf countH > 0 Then
s.Speak "Es sind " & countH & " Herren gemeldet.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
ElseIf countD > 0 Then
s.Speak "Es sind " & countD & " Damen gemeldet.", 1
Do While s.Status.RunningState = 2
DoEvents
Loop
End If

End Sub




Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Udo
20.06.2026 07:06:41
AW: Sprachausgabe in Excel
Anscheinend hats bei mir was es geht einfach nicht.

Trotzdem vielen dank an euch


Hier sind meine Makros, die funktionieren eigentlich alle perfekt, nur friert mein excel während der ansage ein und ich hab keine möglichkeit das abzubrechen.


https://www.herber.de/bbs/user/180833.txt

Ich muss wenn ich es will abbrechen können das wäre mein einziger wunsch


LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Udo
20.06.2026 07:42:34
AW: Sprachausgabe in Excel
Ich muss mich entschuldigen, durch die viele herumprobiererei hab ich windows sound ausgeschaltet gehabt.
Es sprechen alle codes von euch,leider wird bei allen immer was verschluckt und abbrechen funktioniert auch nicht.
die codes was ich gesendet habe verschlucken nichts aber sie frieren mir mein excel ein und keine chance abbzubrechen vielleicht könntet wer die lösung finden.
Danke LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Alwin Weisangler
20.06.2026 10:37:56
AW: Sprachausgabe in Excel
Hallo Udo,

bevor ich dir das deinen Dingen passend weiter baue, teste diesen per API-Funktion aufgebauten und asynchron zu VBA arbeitenden Vorschlag:


Option Explicit
Declare PtrSafe Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
(ByVal lpszName As String, ByVal hModule As LongPtr, ByVal dwFlags As Long) As Long

Const SND_ASYNC As Long = &H1
Const SND_FILENAME As Long = &H20000
Const SND_NOSTOP As Long = &H10

Sub SprecheZweiTexte()
Dim wav1$, wav2$
wav1 = Environ$("TEMP") & "\tts1.wav" ' kann nach Bedarf erweitert werden
wav2 = Environ$("TEMP") & "\tts2.wav"
TextToWav "Ich spreche einen Text und dieser kann jederzeit abgebrochen werden ohne dass es zu irgenwelchen seltsamen Sachen kommen dürfte", wav1
TextToWav "ein weiterer gesprochender Text", wav2
' kann man sowohl mit Schleife als einzeln weiter bauen
PlayWavAndWait wav1
PlayWavAndWait wav2
End Sub

Sub StopSound() ' Das stoppt das jeweilige laufende Wave da asynchron direkt
PlaySound vbNullString, 0, 0
End Sub

Sub TextToWav(text As String, wavPath As String)
Dim spk As Object, fil As Object
Set spk = CreateObject("SAPI.SpVoice")
Set fil = CreateObject("SAPI.SpFileStream")
fil.Open wavPath, 3 ' SSFMCreateForWrite
Set spk.AudioOutputStream = fil
spk.Speak text
fil.Close
End Sub

Sub PlayWavAndWait(wavPath As String)
Dim i#: i = Timer
PlayWavAsync wavPath
Do While Timer < i + 0.1
DoEvents
Loop
Do While SoundIsPlaying()
DoEvents
Loop
End Sub

Sub PlayWavAsync(wavPath As String)
PlaySound wavPath, 0, SND_ASYNC Or SND_FILENAME
End Sub

Function SoundIsPlaying() As Boolean ' PlaySound mit SND_NOSTOP gibt 0 zurück, wenn gerade ein Sound läuft
SoundIsPlaying = (PlaySound(vbNullString, 0, SND_NOSTOP) = 0)
End Function

Was kann dieser Lösungsansatz (mehr ist es im Moment nicht):
- Die Wiedergabe arbeitet asynchron zu VBA
- Es kann jederzeit das aktuell laufende Wave abgebrochen werden (hat aber eine kleine treiberbedingte Latenz)
- Da eine Wave temporär erzeugt wird sollte die Wiedergabe störungsfrei sein

https://www.herber.de/bbs/user/180836.xlsm

Gruß Uwe
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Alwin Weisangler
20.06.2026 16:05:04
AW: Sprachausgabe in Excel
Hallo,

weil es nun mal spannend ist, hier eine weitere und flexiblere API-Lösung zu diesem Thema.
zum Testen mit 3 Files.


Option Explicit
Private Declare PtrSafe Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As LongPtr) As Long

Dim WiedergabeListe As Collection, AktuellerIndex&, ResumePosition&, AktuellesWav$, PauseAktiv As Boolean, Abbruch As Boolean

Sub TextToWav(text As String, wavPath As String)
Dim spk As Object, fil As Object
mciSendString "close mywav", 0, 0, 0
Set spk = CreateObject("SAPI.SpVoice")
Set fil = CreateObject("SAPI.SpFileStream")
fil.Open wavPath, 3, False
Set spk.AudioOutputStream = fil
spk.Speak text
fil.Close
End Sub

Sub SpieleAktuellesWav()
If AktuellerIndex > WiedergabeListe.Count Then Exit Sub
AktuellesWav = WiedergabeListe(AktuellerIndex)
mciSendString "close mywav", 0, 0, 0
mciSendString "open """ & AktuellesWav & """ type waveaudio alias mywav", 0, 0, 0
mciSendString "play mywav", 0, 0, 0
PruefeWiedergabe
End Sub

Sub PauseWiedergabe()
PauseAktiv = True
mciSendString "pause mywav", 0, 0, 0
End Sub

Sub WeiterWiedergabe()
PauseAktiv = False
mciSendString "resume mywav", 0, 0, 0
PruefeWiedergabe
End Sub

Sub StopWiedergabe()
Abbruch = True
PauseAktiv = False
mciSendString "stop mywav", 0, 0, 0
mciSendString "close mywav", 0, 0, 0
End Sub

Function GetMciPosition() As Long
Dim ret As String * 32
mciSendString "status mywav position", ret, 32, 0
GetMciPosition = Val(ret)
End Function

Function GetMciLength() As Long
Dim ret As String * 32
mciSendString "status mywav length", ret, 32, 0
GetMciLength = Val(ret)
End Function

Sub PruefeWiedergabe()
Dim pos&, total&, t#
If PauseAktiv Or Abbruch Then Exit Sub
pos = GetMciPosition()
total = GetMciLength()
If pos >= total Then
AktuellerIndex = AktuellerIndex + 1
SpieleAktuellesWav
Exit Sub
End If
t = Timer
Do While Timer - t < 0.02 ' 20 ms warten
DoEvents
Loop
PruefeWiedergabe
End Sub

Sub StarteWiedergabeListe(ParamArray wavs() As Variant)
Dim i&
Set WiedergabeListe = New Collection
For i = LBound(wavs) To UBound(wavs)
WiedergabeListe.Add wavs(i)
Next i
AktuellerIndex = 1
PauseAktiv = False
Abbruch = False
SpieleAktuellesWav
End Sub

Sub TestTTSQueue()
Dim w1$, w2$, w3$
w1 = Environ$("TEMP") & "\tts1.wav"
w2 = Environ$("TEMP") & "\tts2.wav"
w3 = Environ$("TEMP") & "\tts3.wav"
TextToWav "Dies ist der erste Text.", w1
TextToWav "Dies ist der zweite Text.", w2
TextToWav "Dies ist der dritte Text.", w3
StarteWiedergabeListe w1, w2, w3
End Sub

https://www.herber.de/bbs/user/180837.xlsm

Gruß Uwe
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Udo
20.06.2026 19:47:42
AW: Sprachausgabe in Excel
Alwin das ist perfekt es funktioniert

Hab wieder zu schnell aufgegeben, bzw. aufmeinen Rechner zuwenig gesxhaut das mein lautsprecher nicht aktiv war, das ist perfekt genau das wäre das richtige Start Pause weiter abspielen Abbruch vui genial

LG Udo
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Udo
20.06.2026 19:50:14
AW: Sprachausgabe in Excel
Alwin
kleine korrektur beim ersten mal alles perfekt beim mehrmaligen testen verschluckts oft was bzw lässt z.b Dies ist der 2 te test komplett aus

LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Alwin Weisangler
20.06.2026 23:05:21
AW: Sprachausgabe in Excel
Hallo Udo,

diese Version (20.06.2026 16:05:04) sollte eigentlich sauber laufen, da diese asynchron funktioniert und der Waveplayer des Betriebssystems gesteuert wird. Wenn da Aussetzer passieren, liegt es am Audiotreiber oder es pfuscht dies Antivirussoftware im Zusammenspiel mit dem Audiotreiber drin rum (da gibt es im Netz einige Erkenntnisse dazu).

Ich habe zur Sicherheit dies auf meinem Laptop noch getestet. Es gibt auch da keinerlei Probleme.

Gruß Uwe
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Udo
20.06.2026 19:26:28
AW: Sprachausgabe in Excel
Hallo Alwin
Danke für deine Mühe
läuft leider nicht bei mir

LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
schauan
20.06.2026 14:13:40
AW: Sprachausgabe in Excel
... 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

Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Udo
20.06.2026 19:42:22
AW: Sprachausgabe in Excel
Hallo Schauan

Funktioniert einwandfre, kann ich mit ESC abbrechen dann kommt Debug Meldung Code wurde unterbrochen bei Debuggen
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



wird DoEvents angezeigt, wäre es möglich das der code einfach unterbrochen wird ohne Visual Basic meldung also fehlerfrei?

LG
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Kaum Excel/VBA-Kenntnisse
Daniel
20.06.2026 17:16:35
AW: Sprachausgabe in Excel
Hast du mal probiert, die Ansage nicht zu unterteilen, sondern als ganzes in ein einem?

Dann kannst du zwar nicht unterbrechen, aber dann sollte der gesamte Text auch ausgesprochen werden, ohne das irgendwas verschluckt wird.

Wie man die Texte in einer Variablen sammelt, habe ich dir in meinem Code gezeigt.

Am Schluss lässt du dann einfach diese Variable (txt) als Sprache ausgeben.

Gruß Daniel