Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1836to1840
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Warten auf vorherigen Befehl

Warten auf vorherigen Befehl
16.07.2021 21:09:46
stef26
Hallo Excelprofis,
ich hätte mal wieder eine Fragestellung bei der ich selber ohne eure Hilfe nicht weiterkomme.
Ich habe ein Programm, welches mir eine Vokabel laut vorliest.

Private Sub SuperTalk(Words As String, Person As String, Rate As Long, Volume As Long)
Dim Voc As SpeechLib.SpVoice
Set Voc = New SpVoice
With Voc
If UCase(Person) = "ENGL" Then
Set .Voice = .GetVoices.Item(0)
ElseIf UCase(Person) = "GERM" Then
Set .Voice = .GetVoices.Item(1)
End If
.Rate = Rate
.Volume = Volume
.Speak Words
End With
End Sub
Aufgerufen wir das über ein SUB in der diese Zeile steht. Es wird hier vorgelesen, was in der Zelle F2 steht.
SuperTalk Tabelle3.Range("F2"), "ENGL", 1, 100
Ich möchte nun warten, bis der Text in der Zelle F2 vollständig gesprochen wurde.
Dies hab ich bisher mit wait gelöst, was aber schlecht ist, weil die Texte unterschiedlich lang sein können.
Nun hab ich folgendes gefunden was ich einbauen wollte:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dies hab ich dann nach dem Sprachaufruf rein gemacht.
Do
Sleep 250
Loop Until .Busy = False
in der Hoffnung, das das Makro nun wartet bis zu ende gesprochen wurde.
Leider startet das Makro nun gar nicht mehr. Es kommt die Fehlermeldung:
Unzulässiger oder nicht ausreichend definierter Verweis. Das Wort Busy wird dabei markiert.
Kann ich das so nicht anwenden, oder was mache ich da falsch.
Leider sind meine VBA Kenntnisse immer noch in den Kinderschuhen...
Gruß
Stefan

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warten auf vorherigen Befehl
16.07.2021 22:03:05
Daniel
Hi
Setz das mal noch in die With-Klammer mit rein.
Steht das .Busy außerhalb, ist ja nicht definiert, welches Objekt vor dem Punkt eingesetzt werden soll.
Oder gibst die Objektkette vollständig an: VOC.Busy
Gruß Daniel
AW: Warten auf vorherigen Befehl
16.07.2021 22:06:05
Zwenn
Hallo Stefan,
ich nehme an, der Parameter den Du suchst heißt SpeakAsync, obwohl False default ist. Einfach mal ausprobieren:
https://docs.microsoft.com/en-us/office/vba/api/excel.speech.speak
Ich habe das mit dem Beispiel ausprobiert. Nur mit längerem Text und einer MessageBox, die bei mir auch erst nach der Sprachausgabe angezeigt wird.

Sub UseSpeech()
Application.Speech.Speak "Hello everybody. Please wait till this text is spoken, before open the message box."
MsgBox "Test"
End Sub
Busy müsste eine Boolean-Variable sein, die Du selber deklarierst und dann musst Du sie natürlich auch irgendwo verwalten. Ich wüßte aber nicht, wo das Sinn macht, denn Du kannst die Dauer der Sprachausgabe ja nicht abfragen. Dann hättest Du das Problem ja nicht.
Viele Grüße,
Zwenn
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige