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, 18:02
(Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2019, 18: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, 20:56
(Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2019, 20: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
VG Sabina
bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Registriert seit: 04.03.2019
Version(en): 2016
22.03.2019, 13:34
(Dieser Beitrag wurde zuletzt bearbeitet: 22.03.2019, 13:37 von Merlin-1962.)
Hallo Sabina
Hallo Andre
vielen 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
|