Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Code präzisieren

Betrifft: Code präzisieren von: Andreas
Geschrieben am: 17.09.2014 09:38:27

Hallo Forum,

Ich habe folgenden Code im Netz gefunden. Bei Eingabe im Textfeld3 (UserForm) wird die Eingabe nach Vorgaben im Blatt "Strassen" vervollständigt, dabei werden alle Werte im Blatt verglichen. Das klappt auch super.

2 Probleme:

1. Es sollen nicht alle Werte des Blattes "Strassen" verglichen werden, sondern nur Werte die in Spalte A stehen.

2. Es soll nicht nach Groß- und Kleinschreibung unterschieden werden.


Geht das einfach zu realisieren? Habe leider von VBA nicht so viel Ahnung um diese Probleme zu lösen.


Option Explicit
' verliert die Textbox den Focus, merkt sich Excel die Eingabe

Private Const STARTSPALTE = 1
Private Const WORTE_TAB = "Strassen" ' Blatt der Werte die verglichen werden
Private tb_lock As Boolean, tmp$, rng As Range, blocke_autokorrektur As Boolean
Private bUnterdrücken As Boolean
Private wks As Worksheet


Private Sub TextBox3_Change()
Dim ln&
    If blocke_autokorrektur Then
      blocke_autokorrektur = False
      Exit Sub
    End If
    If tb_lock Then Exit Sub
    tb_lock = True
    ln = Len(TextBox3)
        tmp = Finde_Vorschlag(TextBox3.Value)
        If tmp <> vbNullString Then
            With TextBox3
                .Value = tmp
                .SelStart = ln
                .SelLength = Len(TextBox3)
            End With
        End If
    tb_lock = False
End Sub

Private Function Finde_Vorschlag(eingabe$) As String
Dim fa$, fd As Boolean
    If eingabe = " " Or eingabe = vbNullString Then
        Finde_Vorschlag = vbNullString
        Exit Function
    End If
    With Worksheets(WORTE_TAB).Cells
    
        Set rng = .Find(eingabe, LookIn:=xlValues, lookat:=xlPart)
        If Not rng Is Nothing Then
            fa = rng.Address
            Do
              If Left(rng.Value, Len(eingabe)) = eingabe Then
                fd = True
                Exit Do
              End If
              Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> fa
        If Not fd Then
            Finde_Vorschlag = vbNullString
            Exit Function
        Else
            Finde_Vorschlag = .Cells(rng.Row, rng.Column).Value
        End If
     End If
    End With

End Function

Private Sub Textbox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal shift As Integer)
    If KeyCode = 8 Then blocke_autokorrektur = True
    If Len(TextBox3) = 0 Then blocke_autokorrektur = False
End Sub

Danke fürs lesen und die Hilfe!

mfg, Andreas

  

Betrifft: AW: Code präzisieren von: Martin
Geschrieben am: 17.09.2014 09:48:38

Hallo Andreas,

ungetestet, aber vielleicht theoretisch sollte es so klappen:

Private Function Finde_Vorschlag(eingabe$) As String
Dim fa$, fd As Boolean
    If eingabe = " " Or eingabe = vbNullString Then
        Finde_Vorschlag = vbNullString
        Exit Function
    End If
    With Worksheets(WORTE_TAB).Range("A:A")
    
        Set rng = .Find(eingabe, LookIn:=xlValues, lookat:=xlPart)
        If Not rng Is Nothing Then
            fa = rng.Address
            Do
              If LCase(Left(rng.Value, Len(eingabe))) = LCase(eingabe) Then
                fd = True
                Exit Do
              End If
              Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> fa
        If Not fd Then
            Finde_Vorschlag = vbNullString
            Exit Function
        Else
            Finde_Vorschlag = .Cells(rng.Row, rng.Column).Value
        End If
     End If
    End With

End Function
Viele Grüße

Martin


  

Betrifft: AW: Code präzisieren von: Andreas
Geschrieben am: 17.09.2014 10:09:56

Hallo Martin,

Vielen Dank für die schnelle Hilfe. Funktioniert super.

Einen schönen Tag noch.

mfg, Andreas