Zusammenfassend haben Sie zwei Lösungen:
Entweder setzen Sie WaitUntilDone vor EndSub
Entweder starten Sie Ihre Funktion in einem anderen Thread
@Konti in einem anderen Thread funktioniert es auch nicht, da es den Text unterbricht, sobald die aufgerufene Funktion oder das aufgerufene Sub endet.
Und wenn Sie nicht asynchron ausführen, wird auf das Ende der Funktion oder des Subs gewartet, um fortzufahren.
Endlich fand ich
Function Msg_sonore(sText As String) As Boolean
'Permet de lire le message de manière asynchrone en passant par .vbs
Dim swApp As Object
Dim fso, Dossier, Fichier, f
Dim oWsh As Variant
Set swApp = Application.SldWorks
Set oWsh = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
Dossier = Left(swApp.GetCurrentMacroPathName, InStrRev(swApp.GetCurrentMacroPathName, "\"))
Fichier = "PART_MEP_suppr contraintes.vbs"
If Dir(Dossier & Fichier) <> "" Then fso.DeleteFile Dossier & Fichier
Set f = fso.CreateTextFile(Dossier & Fichier, True)
f.WriteLine "'Fichier temporaire, pour lecture message sonore asynchrone"
f.WriteLine "Dim speech"
f.WriteLine "Set speech = CreateObject(""SAPI.SpVoice"")"
f.WriteLine "speech.Speak """ & sText & """"
f.Close
oWsh.ShellExecute Dossier & Fichier
Set oWsh = Nothing
End Function
1 „Gefällt mir“