Fokus zurück auf Textbox
#1
Hallo zusammen,

ich habe mir ein kleines Suchtool geschrieben das mir einen Teilstring in einer Tabelle sucht. In der Zelle daneben wird eine Markierung bei Erfolg gesetzt.
Das Suchtool besteht aus einer Userform und Textboxen für den Suchstring und anderen Angaben die bei erfolgreicher Suche in die Tabelle eingetragen werden sollen.
Die Userform bleibt so lange geöffnet so lange gesucht werden soll....heißt ich will mehrere Suchvorgänge mit unterschiedlichen Suchanfragen starten...ohne dass die Userform neu geöffnet werden muß.

Das funktioniert auch alles bestens. Aber nach erfolgter Suche bleibt der Fokus aber, also die Fundstelle, in der Tabelle markiert. Um das Ganze aber komfortabler zu gestalten soll aber der Fokus/Cursor wieder in die Textbox1 springen damit ich direkt den nächsten Suchbegriff eingeben kann.


Hier mal mein VBA-Code:
Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 myTextOffsetCol = TextBox2.Text 'welche Spalte für Markierung
 myTextMarkierungszeichen = TextBox3.Text    'Zeichen für Markierung der Fundstelle
 myTextHintergrundfarbe = TextBox4.Text  'Farbindex für Hintergrundfarbe
 myText = TextBox1.Text  'Suchtext
 If KeyCode = vbKeyReturn Then Call FindText
 Application.ThisWorkbook.RefreshAll
End Sub

Code:
Public Sub FindText()
 Dim ws As Worksheet, Found As Range, rngNm As String
 '  Dim myText As String, FirstAddress As String, thisLoc As String
 Dim FirstAddress As String, thisLoc As String
 Dim AddressStr As String, foundNum As Integer
 
 'myText = InputBox("Suchbegriff eintragen - z.B.: xyz123")
 
 If myText = "" Then Exit Sub
 
 With ActiveSheet
   Set Found = .UsedRange.Find(what:=myText, LookIn:=xlValues, MatchCase:=False)
   
   If Not Found Is Nothing Then
     FirstAddress = Found.Address
     Do
       foundNum = foundNum + 1
       rngNm = .Name
       AddressStr = AddressStr & .Name & " " & Found.Address & vbCrLf
       thisLoc = rngNm & " " & Found.Address
       Sheets(rngNm).Select
       Range(Found.Address(RowAbsolute:=False, ColumnAbsolute:=False)).Select
       
'        myFind = MsgBox("Found one """ & myText & """ here!" & vbCr & vbCr & _
'          thisLoc, vbInformation + vbOKCancel + vbDefaultButton1, "Your Result!")
       
       If myFind = 2 Then Exit Sub
       
       Set Found = .UsedRange.FindNext(Found)
       If myTextMarkierungszeichen <> "" Or myTextOffsetCol <> "" Then
         Selection.Cells.Offset(0, myTextOffsetCol).Value = myTextMarkierungszeichen
       End If
       If myTextHintergrundfarbe <> "" Then
         Selection.Interior.ColorIndex = myTextHintergrundfarbe
       End If
     Loop While Not Found Is Nothing And Found.Address <> FirstAddress
   End If
 End With
 
 If Len(AddressStr) Then
'    MsgBox "Found: """ & myText & """ " & foundNum & " times." & vbCr & _
'      AddressStr, vbOKOnly, myText & " found in these cells"
Else:
   MsgBox "Unable to find " & myText & " in this workbook.", vbExclamation
 End If
  Application.ThisWorkbook.RefreshAll
End Sub

Könnt Ihr mir bitte auf die Sprünge helfen wie ich den Fokus wieder auf die Textbox bekomme ohne dass ich mit der Maus hantieren muss?

Vielen Dank für Eure Hilfe!!!
Top
#2
Hallo,



Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
myTextOffsetCol = TextBox2.Text 'welche Spalte für Markierung
myTextMarkierungszeichen = TextBox3.Text    'Zeichen für Markierung der Fundstelle
myTextHintergrundfarbe = TextBox4.Text  'Farbindex für Hintergrundfarbe
myText = TextBox1.Text  'Suchtext
If KeyCode = vbKeyReturn Then Call FindText
Application.ThisWorkbook.RefreshAll
Me.TextBox1.SetFocus
End Sub


mein Vorschlag dazu.

Gruß
Ich
[-] Folgende(r) 1 Nutzer sagt Danke an IchBinIch für diesen Beitrag:
  • sharky51
Top
#3
Hallo Du,

danke für Deinen Beitrtag, leider funktioniert das nicht. Die Zelle (Fundstelle) bleibt weiter markiert aber der Cursor (Fokus) ist nicht zurück in der TextBox1.

Vielleicht noch ne Idee? Müssen eventuell noch spezielle Eigenschaften der Userform oder der Textbox gesetzt werden um wieder zurück zu kommen? Wenn ja, welche?
Top
#4
Hallo Erich,

(22.09.2016, 13:39)sharky51 schrieb: Das Suchtool besteht aus einer Userform und Textboxen für den Suchstring und anderen Angaben die bei erfolgreicher Suche in die Tabelle eingetragen werden sollen.
Die Userform bleibt so lange geöffnet so lange gesucht werden soll....heißt ich will mehrere Suchvorgänge mit unterschiedlichen Suchanfragen starten...ohne dass die Userform neu geöffnet werden muß.

gibst Du in Tabelle die Angaben ein oder erledigt das Makro dies.Falls der zweite Fall zu treffen sollte, dann aktiviere und selektier doch und trage die Werte so ein.
Gruß Stefan
Win 10 / Office 2016
Top
#5
Ich möchte als 'Suchtool' ein Combobox vorschlagen.
Top
#6
Hallo sharky,

ist das der komplette Code?
Du deklarierst "ws as Worksheet", nutzt es aber nicht im Code. Ein Relikt?
Du scheinst auch keine UF für die Suche zu verwenden.
Wenn Du am Ende Deiner Suche aber auf einem anderen Blatt "sitzt", kann "TextBox1.SetFocus" nicht funktionieren wenn
es in dem Blatt keine TextBox1 gibt. Oder Du sitzt in der "falschen" TextBox.
Oder Du versuchst es ohne das von mir vorgeschlagene "me." nur mit "TextBox1.SetFocus".
Allerdings finde ICH im Deinem Code auch keinen Hinweis auf das Durchlaufen mehrere Blätter.
Solltest Du mehrere Blätter durchlaufen musst Du natürlich auf das Blatt referenzieren, in welchem sich die Textbox befindet.
Aber wem sag ich das? :32: :21: 

Gruß
Ich
Top
#7
Hallo Erich,

vielleicht so:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 myTextOffsetCol = TextBox2.Text 'welche Spalte für Markierung
 myTextMarkierungszeichen = TextBox3.Text    'Zeichen für Markierung der Fundstelle
 myTextHintergrundfarbe = TextBox4.Text  'Farbindex für Hintergrundfarbe
 myText = TextBox1.Text  'Suchtext
 If KeyCode = vbKeyReturn Then
   Me.Hide
   Call FindText
   Application.ThisWorkbook.RefreshAll
   Me.Show
 End If
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Top
#8
Hallo Uwe,

super...so funktioniert es wunderbar...ich verstehe es nur nicht so ganz warum!

- Erst verstecken
- dann die Suche starten
- und dann wieder anzeigen....warum muss das so sein?

Vielleicht kannst Du mir das in kurzen Worten erklären.

Aber vielen Dank für Deinen Lösungsweg!!!!!

Allen anderen auch vielen Dank für Eure Beiträge!
Top
#9
Hallo Erich,

das RefreshAll bringt das Ganze irgendwie in einen undefinierten Zustand. Lässt man das weg, behält die TextBox den Fokus.

Gruß Uwe
Top
#10
Hallo Uwe,

OK vielen Dank....werde es im Hinterkopf behalten.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste