In dieser Userform möchte ich wenn ich CheckBox1 anklicke auf Checkbox 4 springen
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
TextBox4.SetFocus
End If
End Sub
das funktioniert noch. Es funktioniert auch in späterer Folge, wenn ich CheckBox1 aus und wieder anklicke.
Jetzt kommt mein Problem!
Ich möchte, wenn ich mit Tabulator weiterspringe und zu Checkbox1 komme und diese bereits value=true gesetzt ist automatisch zu Textbox4 springt.
Private Sub CheckBox1_Enter()
If CheckBox1.Value = True Then
TextBox4.SetFocus
End If
End Sub
Und da ist das Problem: Er setzt den Focus auf TextBox2.
Gehe ich den Code im Debuggmodus durch passt alles bis zu „End Sub“.
Bis dorthin ist SetFocus auf TextBox4, nach Beendigung der Sub springt er auf TextBox2.
Ich hoffe, ich habe mein Problem gut beschrieben und jemand kann mir helfen!
In dieser Userform möchte ich wenn ich CheckBox1 anklicke auf
Checkbox 4 springen
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
TextBox4.SetFocus
End If
End Sub
das funktioniert noch. Es funktioniert auch in späterer Folge,
wenn ich CheckBox1 aus und wieder anklicke.
Jetzt kommt mein Problem!
Ich möchte, wenn ich mit Tabulator weiterspringe und zu
Checkbox1 komme und diese bereits value=true gesetzt ist
automatisch zu Textbox4 springt.
Private Sub CheckBox1_Enter()
If CheckBox1.Value = True Then
TextBox4.SetFocus
End If
End Sub
Und da ist das Problem: Er setzt den Focus auf TextBox2.
Gehe ich den Code im Debuggmodus durch passt alles bis zu „End
Sub“.
Bis dorthin ist SetFocus auf TextBox4, nach Beendigung der Sub
springt er auf TextBox2.
Ich hoffe, ich habe mein Problem gut beschrieben und jemand
kann mir helfen!
Private Sub CheckBox1\_Enter()
If CheckBox1.Value = True Then
TextBox4.SetFocus
End If
End Sub
Und da ist das Problem: Er setzt den Focus auf TextBox2.
dann ist die Textbox4 zu dem Zeitpunkt entweder nicht in der Lage, den Focus zu bekommen (unsichtbar, abgeschaltet …) oder es gint eine Prozedur ‚GotFocus‘ die den Focus auf ein anderes Steuerelement setzt wenn bestimmte Bedingungen erfüllt sind.
Der Code ist richtig, die Ursache, warum sich das Programm nicht verhält, wie Du es möchtest liegt in einem Teil Deines Codes, den Du uns nicht gezeigt hast.
Das funktioniert zwar beim nächsten mal, beim Verlassen von TextBox4 springt er jetzt auf TextBox2 obwohl er ja auf Textbox1 springen sollte. Ich bin dann in einer Schleife von TextBox2, TextBox3 und TextBox4. Zu TextBox1 und CheckBox1 komme ich mit dem Tabulator nicht mehr.
Es muss doch eine unkompliziertere Variante geben, in der man nicht bei jedem Verlassen eines Steuerelements den TabIndex neu setzen muss?
Hallo Dooley,
als workaround könnte man an Folgendes denken:
Private Sub CheckBox1_Enter()
If CheckBox1.Value = True Then
TextBox4.TabIndex = 2
TextBox4.SetFocus
End If
Das IST alles!
Es ist schon richtig, dass das nicht alles ist was ich programmiere!
Aber um das Problem zu zeigen reicht diese Userform mit den Steuerelementen die ich angegeben habe (ist einfacher auszuprobieren)
Der Fehler tritt ja schon bei diesem 0815 VBA-Macro auf.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Es ist schon richtig, dass das nicht alles ist was ich
programmiere!
Aber um das Problem zu zeigen reicht diese Userform mit den
Steuerelementen die ich angegeben habe (ist einfacher
auszuprobieren)
Der Fehler tritt ja schon bei diesem 0815 VBA-Macro auf.
natürlich ist es dann immer sinnvoll, das in einem eigenen kleinen Programm zu testen. Ich sehe mit bloßem Auge keinen Fehler, kann aber in VBA nicht testen, nur etwas ähnliches in VB6 schreiben. Da sieht die Syntax dann natürlich etwas anders aus:
Option Explicit
Private Sub Check1\_Click()
If Check1.Value = Checked Then
Text1.SetFocus
Else
Text2.SetFocus
End If
End Sub
Private Sub Check2\_Click()
If Check2.Value = Checked Then
Text3.SetFocus
Else
Text4.SetFocus
End If
End Sub
Das funktioniert ohne jedes Problem. Steht denn für alle Textboxen Tabstop auf True? Alles sichtbar, nichts auf ‚disabled‘?
Hi,
wie Rainer bereits schrieb, ist es schwer, Dir zu raten, da Du uns nicht mitteilst, in welchem Kontext Du den Code gebrauchst. Versuch mal Folgendes:
Die chx-Box mit Tabindex 0,
die txt-Boxen mit Tabindex 1 bis 4,
einen cmd-Button mit Tabindex 5.
Mit
Private Sub CheckBox1_Change()
If CheckBox1.Value = True Then
TextBox1.SetFocus
Else
TextBox3.TabStop = True
TextBox1.SetFocus
End If
End Sub
Private Sub CommandButton1_Click()
End
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If frm1.CheckBox1.Value = True Then
TextBox3.TabStop = False
TextBox4.SetFocus
End If
End Sub
ich hab mich auch daran versucht, kam da auch nur mehr oder minder funktionale Lösungen mit Veränderungen der Tabindexe und der Tabstops.
Was mir dabei aber auffiel, mit deinem bisher gezeigten Code bleibt die Checkbox immer auf True, wenn sie mal auf True gesetzt wurde.
Ist das so geplant?
Und, Excel ist da sehr eigen, im Debugger sieht man auch in anderen Fällen genau das was du beschrieben hast, BIS „End Sub“ stimmt alles, NACH „End Sub“ wird noch was vom Programmierer ungeplantes ausgeführt und vor allem, es läßt sich nicht verhindern
Bei Interesse kann ich gerne den Code, genauer die vergeblichen Codeversuche an/zu der mistigen ListBox posten.
Gruß
Reinhard
Gruß
Reinhard
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
TextBox4.SetFocus
End If
End Sub
Private Sub CheckBox1_Enter()
If CheckBox1.Value = True Then
TextBox4.SetFocus
End If
End Sub
OT Excel-Vba UserForms zur Laufzeit ‚bestücken‘
Hallo Interessierte,
in gewisser Weise passt es zum Thema.
Es ist möglich zur Laufzeit eine UserForm zu erstellen und diese zu bestücken. Das geht.
Was (meist) völlig scheitert ist, eine schon bestehende UF zur Laufzeit mit was auch immer, CommandButtons, ListBoxes, sonstwas zu bestücken.
Da geschehen seltsame Dinge, die man a) nicht planen kann, b) nicht abstellen kann.
Genau das Gleiche wie hier, trotz klarem Befehl wohin zu „hüpfen“ ist (TextBox4), „hüpft“ Excel nach TextBox2 bei Tab.