Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1640to1644
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

TextBox.SetFocus wird ignoriert

TextBox.SetFocus wird ignoriert
28.08.2018 15:44:47
Max
Hallo an alle,
für eine Datenauswertung habe ich eine Userform mit einem Frame und einer Textbox erstellt. In diese Textbox wird eine Seriennummer per USB Scanner eingetragen. Das letzte Zeichen der Seriennummer ist ein "ENTER". Über dieses "ENTER" wird die Datenauswertung gestartet und die weitere Verwendung des Bauteiles angezeigt. Nachdem die Verwendung (über ein Label) und der Hintergrundfarbe angezeit wurde soll die Textbox neu fokusiert und die Seriennummer markiert werden.
Und das ist der Teil bei dem ich scheitere.
Was ich bis jetzt getestet habe:

Private Sub Textbox_KeyDown ist die Abfrage ob vbKeyReturn gedrückt wurde.
Desweitern wird der KeyCode = 0 gesetzt und die Textbox mit SetFocus fokusiert.
Für die Markierung  wird SelStart = 0 und SelLength = Len(Txtbox.Text) gesetzt.
Bis zum KexCode = 0 geht die Programmierung. Danach werden die Befehle ignoriert.
Ein Auszug aus meiner Programmierung
Codeauszug

Private Sub Scanfeld_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(UserForm1.Scanfeld.Value)  16 Then Exit Sub
If KeyCode = vbKeyReturn Then
'Load sanduhr 'die UF Laden --> damit wird UserForm_Initialize aufgerufen und
'sanduhr.Show vbModeless
Call los
'Tasteneingabe zu null seten da sonnst auf das nächte Feld angesprungen wird
KeyCode = 0
With UserForm1.FrameScanfeld
'zum erneuten Scannen die alte Seriennummer markieren
.Scanfeld.SetFocus
.Scanfeld.SelStart = 0
.Scanfeld.SelLength = Len(.Scanfeld.Text)
.Serialnummer = Produktions_Prozesse(0).d_Seriennummer
End With
End If
End Sub

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: TextBox.SetFocus wird ignoriert
28.08.2018 16:08:59
EtoPHG
Hallo Max,
Etwas einfacher ;-):
PPrivate Sub Scanfeld_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(Scanfeld) > 0 Then Call los
Scanfeld = ""
Cancel = True
End Sub
Gruess Hansueli
Typo:PPrivate ... soll nur Private heissen! (owT)
28.08.2018 16:10:00
EtoPHG

Typo:PPrivate ... soll nur Private heissen! (owT)
28.08.2018 16:10:00
EtoPHG

AW: Typo:PPrivate ... soll nur Private heissen! (owT)
28.08.2018 18:12:48
Max
Hallo Hansueli,
danke für deine Antwort. Mit dem Scanfeld_Exit Event habe ich es auch schon getestet. Leider wird das Event nicht ausgelöst. Auf der Userform ist noch ein Button zum Beenden dieser. Setzte ich den Focus darauf wird das Exit Event des Frame ausgelöst aber nicht der TextBox. Ändere ich die Programmierung und füge alles in das Exit Event des Frame wird das TextBox.Setfocus weiterhin ignoriert. Da ich aktuell nicht mehr auf Arbeit bin kann ich heute nix mehr testen. Wenn es hilft versuche ich morgen die Datei mal hoch zu laden. Ein Paar Dinge die Firmenintern sind werde ich noch raus löschen müssen. Vielen Danke für eure Hilfe.
Anzeige
AW: Ja eine Beispielmappe mit UF würde helfen
28.08.2018 18:18:01
EtoPHG
Ich warte auf deinen Upload, Max
AW: Ja eine Beispielmappe mit UF würde helfen
29.08.2018 07:52:47
Max
https://www.herber.de/bbs/user/123626.xlsm
Hallo Hansueli,
oben der Link zur Datei. Ein Großteil der Funktionen sind auskommentiert. Die reine Funktion der Userform ist aber noch gegeben. Nach dem Starten der UF sieht man eine 16 stellige Zahl in der TextBox. Klickt man diese an und drückt danach die "ENTER" Taste wird das Makro aufgeführt. Nach dem die Verwendung in das entsprechende Label eingetragen wurde soll die TextBox fokusiert und der Textinhalt Markiert werden. Das Fokusieren und Markieren bekomme ich nicht auf die Kette.
Vielen Dank für Deine/Eure Hilfe
Anzeige
Zusätzliche Textbox in Frame erstellen,
29.08.2018 08:40:39
EtoPHG
das ist was du machen musst Max,
Das Problem ist, dass das Scanfeld innerhalb des Frames, kein Nachfolger Control hat, damit greift das _Exit Ereignis auf dieser Ebene nicht. Es gibt einen einfachen Trick:
1. Alle Ereigniscodes für Scanfeld löschen (inkl die auf Ebene Frame und Userform!)
2. Nur meinen Codevorschlag für das Scanfeld:
Private Sub Scanfeld_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(Scanfeld) > 0 Then Call los
Scanfeld = ""
Cancel = True
End Sub

3. Eine 'kleine' zusätzliche Textbox in das FrameScanfeld über die Textbox Scanfeld einfügen.
4. Diese 'kleine' Textbox eine Ebene nach hinten (Kontextmenü).
... und schon läuft alles wie gewünscht.
Gruess Hansueli
Anzeige
AW: Zusätzliche Textbox in Frame erstellen,
29.08.2018 10:01:41
Max
Hallo Hansueli,
danke für den Tipp. Das _Exit Event wird jetzt richtig ausgelöst. Die TextBox wird auch geleert und der Fokus scheint auf der Textbox zu stehen. Leider wird der blinkende Cursor nicht angezeigt. Kann man das noch ändern? Gibt es auch die Möglichkeit den Text in der TextBox nur zu mrkieren und nicht zu löschen?
Danke
AW: Zusätzliche Textbox in Frame erstellen,
29.08.2018 11:13:24
EtoPHG
Hallo Max,
lass einfach die Codezeile Scanfeld = "" weg!
Mir ist unverständlich, wie du auf diese Frage kommst. Du hast 100te von Codezeilen. Stammen die nicht von Dir?
P.S. In vielen Modulen fehlt das Option Explicit. Ich würde dir dringend in diesem VBA Projekt ein paar Stunden für "Aufräumen" zu investieren.
Gruess Hansueli
Anzeige
AW: Zusätzliche Textbox in Frame erstellen,
29.08.2018 11:51:56
Max
Hallo Hansueli,
ja die Codezeilen stammen alle von mir mit Hiilfe des Internets. (zur Info: Es sind mehrer Module dabei die nicht benutzt werden. Die Abfrage/Datenauswertung dauer mehrer Sekunden. In dieser Zeit sollte ein GIF File angezeigt werden. Es ist eine sich drehende Sanduhr. Bitte nicht mit Sanduhr des Mauszeigers verwechseln. Leider dreht sich die Sanduhr während der Berechung nicht. Deswegen wird sie nicht mehr angezeigt. Ich bin außerdem ein schlampiger Programmierer ;-). Deswegen fehlt größtenteils das Option Explicit)
Ich denke ein klein wenig Erfahrung in VBA habe ich schon. Ich komme nur bei meinem Problem nicht weiter.
Lasse ich die Codezeile Scanfeld = "" weg wird beim erneuen Scannen der alte DMC Code (16 stellige Nummer) nicht gelöscht sondern der neue hinten ran geschrieben. Mein Ziel ist es den Inhalt der TextBox zu markieren. Damit ist der DMC Code noch so lange Sichtbar bis der neue gescannt wird. Gibt es noch andere Befehle um einen Text in der TextBox zu markieren als die unten stehenden?
Scanfeld.SelStart = 0
Scanfeld.SelLength = Len(Scanfeld.Text)
Danke
Anzeige
AW: Zusätzliche Textbox in Frame erstellen,
29.08.2018 12:24:33
Max
Hallo Hansueli,
ja die Codezeilen stammen alle von mir mit Hiilfe des Internets. (zur Info: Es sind mehrer Module dabei die nicht benutzt werden. Die Abfrage/Datenauswertung dauer mehrer Sekunden. In dieser Zeit sollte ein GIF File angezeigt werden. Es ist eine sich drehende Sanduhr. Bitte nicht mit Sanduhr des Mauszeigers verwechseln. Leider dreht sich die Sanduhr während der Berechung nicht. Deswegen wird sie nicht mehr angezeigt. Ich bin außerdem ein schlampiger Programmierer ;-). Deswegen fehlt größtenteils das Option Explicit)
Ich denke ein klein wenig Erfahrung in VBA habe ich schon. Ich komme nur bei meinem Problem nicht weiter.
Lasse ich die Codezeile Scanfeld = "" weg wird beim erneuen Scannen der alte DMC Code (16 stellige Nummer) nicht gelöscht sondern der neue hinten ran geschrieben. Mein Ziel ist es den Inhalt der TextBox zu markieren. Damit ist der DMC Code noch so lange Sichtbar bis der neue gescannt wird. Gibt es noch andere Befehle um einen Text in der TextBox zu markieren als die unten stehenden?
Scanfeld.SelStart = 0
Scanfeld.SelLength = Len(Scanfeld.Text)
Danke
Anzeige
Labels statt Frames!
29.08.2018 12:48:22
Daniel
Hi
der noch bessere Trick wäre, anstelle der Frames einfache Labels mit Rahmenlinie und transparentem Hintergrund zu verwenden.
wenn man einfach nur die Rahmen für die Strukturierung der Userform haben will, ist das die einfachere Lösung.
Gruß Daniel
AW: Labels statt Frames!
29.08.2018 14:03:51
Max
Hallo an alle,
ich habe für mich eine andere Lösung gefunden. Ich nutze die Programmierung von Hansueli. Danke dafür. Im _Exit Event leere ich den Text in der Textbox und setzte Cancel= true.
Damit verliert die TextBox ihren Fokus nicht und ist für die nächste Eingabe bereit. Zuvor trage ich den Text in ein Label und lasse damit die zuletzt gescannte Nummer anzeigen.
Vielen Dank für Eure Hilfe
Gruß Max
Anzeige
AW: Labels statt Frames!
29.08.2018 14:09:04
daniel
wenn du anstelle des Frames ein Label verwenden würdest, bräuchtest du keine zusätzliche TextBox innerhalb des Frames.
Das wäre der Unterschied.
Gruß Daniel

110 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige