Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
erst mal ein allgemeiner Hinweis. Wenn Du von außerhalb eines Userforms auf Objekte des Userforms zugreifen willst, musst Du es auch benennen. Also z.B.
Userform1.Textbox137....
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 04.03.2019
Version(en): 2016
20.03.2019, 19:02
(Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2019, 19:02 von Merlin-1962.)
Hi Andre,
danke für diesen Tipp, meine Schreibassistenz hat sich bald in die Tonne geworfen vor lachen. Auf das einfachste kommt man leider nicht immer als erstes. Da hätte ich mir jede Menge zuhören bei der Sprachausgabe schenken können.. Aber wäre wohl der erste vernünftige Gedankengang gewesen. Wenn ich abends in einem Pup sitze bei einem gemütlichen Guinness, zur Zigarette nach draußen gehe, dann kommt das Guinnes ja auch nicht mit der Kellnerin ohne das ich sage wo ich bin.
:19: :19: :19: :19:
also Danke es hat gefunzt.
Aber bevor ich jetzt wieder erst viele Tage verschwende frage ich besser direkt.
Bei Excel kann man einstellen, dass es einem nach Eingabe in einer Zelle auf dem Tabellenblatt diese Eingabe nach verlassen der Zelle vorließt. Ist es möglich einem auch die Eingaben auf der UserForm in den TextBoxen vorlesen zu lassen - VBA?
Gruß
Jürgen
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Jürgen, ob es da eine Einstellung gibt weiß ich nicht. Eine Lösung wäre z.B. eine entsprechende Funktion. Ich ruf die hier aus dem Sub auf, Du könntest Die z.B. beim Verlassen der TextBox oder bei einem ENTER oder einem "Vorlesebutton" ausführen. Code: Private Function Vorlesen(strText As String) Dim objSpeaker As Object Set objSpeaker = CreateObject("SAPI.SpVoice") objSpeaker.Volume = 100 objSpeaker.Speak strText Set objSpeaker = Nothing End Function Sub Test() Call Vorlesen("H?rst Du mich?") End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 04.03.2019
Version(en): 2016
Hi Andre
werden das morgen gleich mal einbauen und probieren
Gruß
Jürgen
Registriert seit: 04.03.2019
Version(en): 2016
Hi Andre, leider haben wir Deinen Code so nicht zum laufen bekommen. Sprich er hat immer einen Object Fehler gebracht. Nach langem hin und her haben wir etwas gestrickt: In der Userform werden bei den Textboxen einmal beim "Enter" und einmal beim "Exit" die Sprachausgabe gestartet. Warum bei beiden? Einmal beim Betreten der Textbox, dass man weis ob etwas drin steht. Beim verlassen Sprachausgabe nur wenn etwas geändert wurde. z.B.: Code für eine TextBox Code: Option Explicit
Dim txt As String
' Code Userform1: für die Sprachausgabe
Sub Sprachausgabe() Dim sayIt As Object Dim myText As String If ToggleButton1.Value = False Then Set sayIt = CreateObject("SAPI.SpVoice") myText = txt sayIt.Speak myText Else Exit Sub End If End Sub
'Code für die TextBox bei Enter und bei Exit
Private Sub TextBox102_Enter() txt = TextBox102.Value Call Sprachausgabe End Sub
Private Sub TextBox102_Exit(ByVal Cancel As MSForms.ReturnBoolean) If txt <> TextBox102 Then txt = TextBox102.Value Call Sprachausgabe Call Ausgang Else Call Ausgang End If End Sub
Du wirst lachen, das funzt sogar Nur mit der Sprachausgabe bei MouseMove sind wir Ratlos. Bekommen es nicht gelöst, dass wenn man eine Textbox, CommandButton, Listbox mit der Mouse überfähr, dass die Sprachausgabe nur ein mal erfolgt, bzw. dass die Sprachausgabe sich beim Bewegen der Mause innerhalb der TextBox, Command........ nicht ständig wiederholt. Code Für MouseMove: Code: Private Sub CommandButton6_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim spz As Integer spz = 1 Do While spz = 1 txt = CommandButton6.Caption Call Sprachausgabe spz = spz + 1 Loop Exit Sub End Sub
Hast Du eine Lösung? Gruß Jürgen
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Jürgen, das Bewegen der Maus erzeugt ggf. mehrere MouseMove - Ereignisse. Du kannst z.B. mal dieses Makro für einen CommandButton nehmen, mit der Maus darüber ziehen und schauen, wie oft Dir die Zeile MouseMove_cmd_1 im Direktfenster ausgegeben wird. Code: Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Debug.Print "MouseMove_cmd_1" End Sub
Vermeiden kannst Du das z.B. mit einer Variable, die die weitere Ausführung des Makro ggf. verhindert. Du müsstest nur schauen, wann Du die Variable wieder zurücksetzt. Wäre z.B. sinnoll, wenn Du bei der Mausbewegung von dem Cmd-Button runterkommst - da könnte vielleicht das UserForm_MouseMove wirken. Code: Option Explicit
Dim boMove As Boolean Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If boMove Then Exit Sub boMove = True Debug.Print "MouseMove_cmd_1" End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 03.10.2018
Version(en): 2010 ProPlus / 2016 ProPlus
21.03.2019, 21:56
(Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2019, 21:56 von Flotter Feger.)
Hallo Leute, Excel kann von sich aus sprechen ... das ganze herumgehacke mit der SAPI kann man sich schenken. In 2003 war da ein Bug drin, aber ab 2007 geht das schon wieder. Application.Speech.Speak "Hallo Leute !!!", True Es wird dabei immer die im System eingestellte Stimme verwendet. Zitat:Bekommen es nicht gelöst, dass wenn man eine Textbox, CommandButton, Listbox mit der Mouse überfähr, dass die Sprachausgabe nur ein mal erfolgt, hab dir das mal exemplarisch für eine TextBox auf der Userform gemacht. Um gleichzeitig mehrere TextBoxen anzusprechen, ohne für jede einzelne Code zu schreiben ... aber die Objekt-Klasse kennst du ja schon. Code: Option Explicit
Private bolSpeak As Boolean
Private Sub TextBox1_Change() bolSpeak = False End Sub
Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If bolSpeak = False Then If TextBox1.Text <> "" Then Application.Speech.Speak TextBox1.Text, True Else Application.Speech.Speak "TextBox ist leer", True End If bolSpeak = True End If End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) bolSpeak = False End Sub
Registriert seit: 04.03.2019
Version(en): 2016
22.03.2019, 14:34
(Dieser Beitrag wurde zuletzt bearbeitet: 22.03.2019, 14:37 von Merlin-1962.)
Hallo SabinaHallo Andrevielen Dank für Eure Unterstützung. Das Excel sprechen kann wussten wir ja, nur das in eine Userform zu bringen war ein Probs, dass wir Dank Andre in den Grundzügen mit seinem Code realisieren konnten. Dank Sabina ist das ganze einfacher geworden. Haben das jetzt wie folgt gelöst: Code: Option Explicit
Dim objTB1() As New clsTB1 Dim objTB2() As New clsTB2 Dim objTB3() As New clsTB3 Dim txt As String '------------------------ Um diese Zeilen ergänzt Dim objCtrlA As MSForms.Control '----------- Um diese Zeilen ergänzt Private bolSpeak As Boolean
'----- Name der Textbox ermitteln auch innerhalb von Frames------------------------------------------------------------------
Function GetActiveControl(ByRef objCtrl As MSForms.Control) _ As MSForms.Control If Not objCtrl Is Nothing Then Select Case True Case TypeOf objCtrl Is MSForms.MultiPage Set objCtrl = objCtrl.SelectedItem.ActiveControl Set objCtrl = GetActiveControl(objCtrl)
Case TypeOf objCtrl Is MSForms.Frame Set objCtrl = objCtrl.ActiveControl Set objCtrl = GetActiveControl(objCtrl)
Case Else End Select End If Set GetActiveControl = objCtrl End Function
'------- Ende der Namensermittlung ---------------------------------------
'------- Sprachausgabe ---------------------------------------------------
Private Sub Sprechen() Set objCtrlA = GetActiveControl(Me.ActiveControl) If Not objCtrlA Is Nothing Then If bolSpeak = False Then If objCtrlA.Text <> "" Then Application.Speech.Speak objCtrlA.ControlTipText & objCtrlA.Text, True Else Application.Speech.Speak "TextBox ist leer", True End If bolSpeak = True
End If Else Exit Sub End If End Sub
'-------- Ende Sprachausgabe ---------------------------------------------
'-------- Sprachausgabe bei Exit -----------------------------------------
Private Sub SprechenExit() If txt <> objCtrlA Then txt = objCtrlA.Value Call Sprechen Call Ausgang Else Call Ausgang End If End Sub
'-------- Bei jeder TextBox bei "MouseMove" oder Enter oder Exit ----------
Private Sub TextBox102_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Call Sprechen End Sub
Private Sub TextBox102_Enter() Call Sprechen End Sub
Private Sub TextBox102_Exit(ByVal Cancel As MSForms.ReturnBoolean) Call SprechenExit End Sub
Es ist also erreicht, dass bei einer aktiven TextBox bei MouseMove einmal der Inhalt gesprochen wird. ebenfalls bei hineinspringen per Tab und bei Änderung des Inhaltes auch beim verlassen dieser gesprochen wird. Jatzt muss das ganze noch auf die Commandbuttons umgesetzt werden. Also erst mal vielen lieben Dank an Euch zwei. Wenn es Probs gibt melde ich mich. LG Jürgen PS.: Sabina wieder kein Fettnäpfchen getroffen :19: :19: :19: :19:
Registriert seit: 04.03.2019
Version(en): 2016
Hmmm - zu Früh gefreut - funzt noch nicht so wie es soll, denn er gibt nur per sprache das aus was im Focus ist
|