Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Textfeld automatisch füllen je nach vorigem Texfel

Textfeld automatisch füllen je nach vorigem Texfel
07.02.2005 09:24:52
Gabi
Liebe Leute,
Heute früh gab es Fehlermeldungen beim Aufruf des Forums, desshalb die Anfrage noch einmal.
Gleich noch eine Frage.
Nachdem ich gestern den ganzen Tag die Suchmaschine gequält habe und die halbe Nacht OHNE Erfolg damit verbracht habe eine Formel einer TextBox "näher zu bringen", hier eine Frage an Euch.
Ich habe in einem Arbeitsplatt 2 Tabellen.
Tabelle 2 "Lieferanten" mit einer Liste von Lieferanten L_Nummer-Name-PLZ-Ort-Tel.-Fax- . . . usf.
PLZ in Spalte F Ort in Spalte G Der gesamte Bereich PLz und Ort hat den Namen "PlzListe"
Tabelle 1 mit:
L_Nummer (in A1) - Firma (in B1) - Name(in C1) - Vorname (in D1) - PLZ (in E1) - Ort (in F1)
als Überschriften.
In F2 habe ich folgende Formel =SVERWEIS(E2;PlzListe;2;FALSCH)
Wenn ich nun in Tabelle 1 bei Bedarf einzelne Spalten ausfülle, wird nach der Eingabe der Postleitzahl in Spalte E *automatisch* der dazugehörige Ort in Spalte F eingetragen :)
Nun mein Problem.
Ich möchte, daß auf ein UserForm übertragen. In Textbox "PLZ" eine Postleitzahl eingegeben soll automatisch in der daneben liegenden TextBox der Ort erscheinen.
Jetzt muss ich beim ausfüllen der PLZ (TextBox6) in der TextBox7 den dazugehörigen Ort per Hand aus einer anderen Datei heraussuchen und eintragen.
Ich bekomme es nicht hin, der TextBox7 im UserForm1 zu sagen:
"Wenn in der Textbox6 ("PLZ") eine Zahl drinsteht, dann schau in Tabelle 2 ("Lieferanten") nach, welcher Ort zu dieser PLZahl gehört und Zeige diesen Wert in der Textbox7 ("Ort") an :( :( :(
Trage danach bei Klick auf "Eintragen" die Inhalte des Userform in die nächste Freie Zeile in Tabelle1 ein.
Wie bekomme ich so einen SVERWEIS wie oben gezeigt in und mit der TextBox7 verwirklicht?
Also, sobald ich in Textbox6 eine PLZ eintrage, soll in Textbox7 automatisch der dazugehörige Ort erscheinen.
Mit freundlichen Grüßen
Gabi
Mein Userform bisher:

Private Sub CommandButton1_Click()
'--- Beginn Buttom ---
z = Range("A1").End(xlDown).Row + 1
If z > 65000 Then z = 2
Cells(z, 1) = TextBox1
Cells(z, 2) = TextBox2
Cells(z, 3) = TextBox3
Cells(z, 4) = TextBox4
Cells(z, 5) = TextBox5
Cells(z, 6) = TextBox6
End Sub

' --- Ende Buttom ---

Private Sub Label2_Click()
End Sub


Private Sub ListBox1_Click()
End Sub


Private Sub TextBox1_Change()
End Sub

' --- Textbox PLZ Beginn ---

Private Sub TextBox5_Change()
End Sub

' --- Textbox PLZ Ende ---
' --- Textbox Ort Beginn hier soll laut PLZ der Ort ausgelesen werden ---

Private Sub TextBox6_Change()
End Sub

' --- Textbox Ort Ende ---

Private Sub UserForm_Click()
End Sub

Anzeige
AW: Textfeld automatisch füllen je nach vorigem Texfel
RR
Hallo,
ami sollte es gehen:

Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
PLZ = TextBox6.Value * 1
For Each zelle In Worksheets("tabelle 2").Range("F:F")
If zelle.Value = PLZ Then
UserForm1.TextBox7.Value = Worksheets("tabelle 2").Cells(zelle.Row, 7).Value
Exit Sub
End If
Next
End Sub

Gruß
RR
Anzeige
AW: Textfeld automatisch füllen je nach vorigem Te
Gabi
Hallo RR,
DANKE!!!
Ich fasse es nicht. ES funktioniert!
Das es so kompliziert ist! Bei der Arbeit mit ein bis zwei Tabellenblättern reicht eine verhältnismäßig einfache, auch für den Laien einigermaßen verständliche Formel aus, etwas Arbeit dem Computer zu überlassen.
Kommt dann eine UserForm hinzu, wird es so verdammt kompliziert!
Vielen Dank für die Hilfe!
Liebe Grüße
Gabi
Anzeige
...es geht natürlich auch einfacher...
RR
...ich war vorhin nur zu faul zum nachdenken;-)

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
on error exit sub
PLZ = TextBox1.Value * 1
TextBox2.Value = Application.WorksheetFunction.VLookup(PLZ, Worksheets("t2").Range("F:G"), 2, 0)
End Sub

Das VLookup entspricht dabei dem Sverweis.
Gruß
RR
Anzeige
AW: ...es geht natürlich auch einfacher...
Gabi
Hallo RR,
Deine Erläuterungen zum 2. Beispiel sind ja nun etwas besser wahrnehmbar und besser einzusehen :)
Zunächst noch einmal vielen Dank für Deine Beispiele. Das Erste funktioniert hervorragend.
Nun möchte ich diese Abfrage in mein erstes schon gebautes UserForms übernehmen. Mehrwert schaffen :)
Der Hacken, ich habe ein Userform (Danke Sepp!) in der die PLZ in TextBox8 auf Gültigkeit geprüft wird
Nun soll Deine "Formel" :
[Zitat]
TextBox2.Value = Application.WorksheetFunction.VLookup(PLZ, Worksheets("t2").Range("F:G"), 2, 0)
---> Das VLookup entspricht dabei dem Sverweis.
[/Zitat]
auch noch in diese Abfrage hinein.
' --- In TextBox 8 muss eine "richtige" (6-stellige) PLZ eingetragen werden, bevor das Feld verlassen wird

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Wert As Variant
If putData Then Exit Sub      'Wenn Prüfvariable auf Wahr, dann Sub verlassen
Wert = TextBox8.Value
If Not (Wert >= 1000 And Wert <= 99999 And Len(Wert) >= 4 And Len(Wert) <= 5) Then
MsgBox "Fehlerhafte Eingabe! Bitte PLZ eingeben, Danke!", vbInformation
TextBox8.SetFocus
TextBox8.SelStart = 0
TextBox8.SelLength = Len(TextBox8.Value)
Cancel = True
Else
TextBox8.Value = Format(Int(Wert), "00000")
End If
End Sub


# Ende dieser funktionierenden TextBox8

Wie bekomme ich nun Deine "Formel" (---> s.u.) in die Abfrage hinein ?
Egal wo hin ich diese 5 Zeilen setze, immer bekomme ich falsche Werte bzw. Error Meldungen von Excel an den Kopf geworfen :( :(


' --- beim Verlassen des Feldes 8 (PLZ) wird in der naechsten Textbox 9 (Ort) automatisch
' --- aus Tabelle_1 aus *Spalte B* der Ort übernommen.
' --- PLZ steht in Tabelle_1 in Spalte A

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
on error exit sub
PLZ = TextBox1.Value * 1
---> ---> TextBox2.Value = Application.WorksheetFunction.VLookup(PLZ, Worksheets("Tabelle_1").Range("A:B"), 2, 0)
End Sub

An welche Stelle setzte ich diese "Formel" in die obige funktionierende Abfrage der TextBox8?
Liebe Grüße Gabi
Anzeige
eine erste Lösung
Gabi
Hallo RR,
ich habe es hinbekommen !! :) :)
Allerdings weiß ich nicht ob das wirklich so vollkommen richtig ist. Vor allem Deine Zeilen mit der "Formel im Textfeld". Bist Du bitte so nett und schaust noch einmal darüber.
Aus der Tabelle 1 -> Spalte A = PLZ, Spalte B = Ort kommen die Werte in das UserForm
In Tabelle "Lieferanten" schreibt das UserForm die PLZ in die Spalte H und der Ort in die Spalte I
Hier die TextBox8 für die PLZ, TextBox9 soll automatisch den Ort aus Tabelle 1 Spalte C bekommen.
' --- es muss eine "richtige" (6 stellige) PLZ eingetragen werden, in Textfeld 8 bevor das Feld verlassen wird
' --- wird ja per Hand in das Userform eingetragen

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Wert As Variant
If putData Then Exit Sub      'Wenn Prfvariable auf Wahr, dann Sub verlassen
Wert = TextBox8.Value
If Not (Wert >= 1000 And Wert <= 99999 And Len(Wert) >= 4 And Len(Wert) <= 5) Then
MsgBox "Fehlerhafte Eingabe! Bitte PLZ eingeben, Danke!", vbInformation
TextBox8.SetFocus
TextBox8.SelStart = 0
TextBox8.SelLength = Len(TextBox8.Value)
Cancel = True
Else
TextBox8.Value = Format(Int(Wert), "00000")
' --- danach soll automatisch in der TextBox9 der Ort erscheinen.
' --- Quelle dafr ist Tabelle 1 (Spalte A PLZ, Spalte B Ort)
End If
Dim PLZ As Long
PLZ = TextBox8.Value * 1
TextBox9.Value = Application.WorksheetFunction.VLookup(PLZ, Worksheets("Tabelle 1").Range("A:B"), 2, 0)
End Sub

Mit freundlichen Grüßen
Gabi
Anzeige
AW: eine erste Lösung
RR
Hallo,
da ich gestern nicht mehr im Büro war, hier jetzt der angepasste Code für den Sverweis. Du kannst Ihn so unter deinem eigenen einfügen. In deinem Code kannst du ab -> Dim PLZ... bis ..., 2, 0)

Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Fehler
PLZ = TextBox8.Value * 1
TextBox9.Value = Application.WorksheetFunction.VLookup(PLZ, Worksheets("Tabelle 1").Range("A:B"), 2, 0)
Exit Sub
Fehler:
MsgBox "PLZ nicht gefunden, bitte prüfen Sie Ihre Eingabe!", vbInformation
TextBox8.SetFocus
TextBox8.SelStart = 0
TextBox8.SelLength = Len(TextBox1.Value)
Cancel = True
End Sub

Gruß
RR
Anzeige
AW: eine erste Lösung - funktionier so nicht richt
Hallo
Hallo RR,
zunächst einmal herzlichen Dank für Deine Bemühungen.
Deine obige Lösung bringt "Fehler beim Kompilieren Variable nicht definiert"
Der zeigt auf Deine erste Zeile:

Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
und markiert ---> PLZ = TextBox8.Value * 1
Meine alte Variante von oben noch einmal zur Übersicht:

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Wert As Variant
If putData Then Exit Sub      'Wenn Prüfvariable auf Wahr, dann Sub verlassen
Wert = TextBox8.Value
If Not (Wert >= 1000 And Wert <= 99999 And Len(Wert) >= 4 And Len(Wert) <= 5) Then
MsgBox "Fehlerhafte Eingabe! Bitte PLZ eingeben, Danke!", vbInformation
TextBox8.SetFocus
TextBox8.SelStart = 0
TextBox8.SelLength = Len(TextBox8.Value)
Cancel = True
Else
TextBox8.Value = Format(Int(Wert), "00000")
End If
Dim PLZ As Long
PLZ = TextBox8.Value * 1
TextBox9.Value = Application.WorksheetFunction.VLookup(PLZ, Worksheets("Tabelle 1").Range("A:B"), 2, 0)
End Sub

################
Nun habe ich :
[Zitat]
der angepasste Code für den Sverweis. Du kannst Ihn so unter deinem eigenen einfügen. In deinem Code kannst du ab -> Dim PLZ... bis ..., 2, 0) [/Zitat]
Deinen Code an die hoffentlich richtige Stelle eingesetzt.
Egal ob ich den vor das "End Sub
" dort wo ich Dim PLZ . . . bis 2,0) gelöscht habe oder hinter das darauf folgende "End Sub " es kommt immer die Fehlermeldung "Fehler beim Kompilieren Variable nicht definiert":
################

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Wert As Variant
If putData Then Exit Sub      'Wenn Pruefvariable auf Wahr, dann Sub verlassen
Wert = TextBox8.Value
If Not (Wert >= 1000 And Wert <= 99999 And Len(Wert) >= 4 And Len(Wert) <= 5) Then
MsgBox "Fehlerhafte Eingabe! Bitte PLZ eingeben, Danke!", vbInformation
TextBox8.SetFocus
TextBox8.SelStart = 0
TextBox8.SelLength = Len(TextBox8.Value)
Cancel = True
Else
TextBox8.Value = Format(Int(Wert), "00000")
End If
' --->hier  Dim PLZ... bis ..., 2, 0) <- geloescht
End Sub

' ---> der erweiterte Code fur diese TextBox8 um in der naechsten den Ort einzulesen:

Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo Fehler
PLZ = TextBox8.Value * 1
TextBox9.Value = Application.WorksheetFunction.VLookup(PLZ, Worksheets("Tabelle 1").Range("A:B"), 2, 0)
Exit Sub
' --- Fehler:
MsgBox "PLZ nicht gefunden, bitte pruefen Sie Ihre Eingabe!", vbInformation
TextBox8.SetFocus
TextBox8.SelStart = 0
TextBox8.SelLength = Len(TextBox1.Value)
Cancel = True
End Sub

################
Nach der Fehlermeldung und Beenden des Debug mag Excel seinen Dienst nicht mehr versehen. Nur über [Stg]+[Alt]+[Entf] ist Excel dazu zu bewegen, seinen unterbrochenen Dienst aufzugeben.
Mit freundlichen Grüßen
Gabi
Anzeige
AW: eine erste Lösung - funktionier so nicht richt
RR
Hallo,
bevor wir hier lange rumrätseln, habe ich mal ein Beispiel hochgeladen. Da funktioniert es. Du müsstest nur die Nummern der Textboxen und den Tabellennamen anpassen.
https://www.herber.de/bbs/user/17614.xls
Gruß
RR
AW: eine erste Lösung - funktionier so nicht richt
Gabi
Hallo RR,
entschuldige die späte Rückmeldung. Ich war auswärtig unterwegs. Desshalb erst meine späte Antwort.
Dein Blatt und Userform funktionieren tatellos.
Nun möchte ich diese Funktion in meine vorhandene UserForm einbauen.
Dazu habe ich die entsprechenden Werte und Angaben geändert.
Das Userform lässt sich zunächst auch fehlerfrei aufrufen.
Wenn ich jedoch aus Textbox9 heraus gehe, erhalte ich die Meldung "Variable nicht definiert".
Irgendwo wird da vorher schon etwas "durcheinander" gebracht.
Ich sehe da im Moment überhaupt nicht mehr durch.
https://www.herber.de/bbs/user/17787.xls
Mit freundlichen Grüßen
Gabi
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Textfeld automatisch füllen je nach vorigem Textfeld


Schritt-für-Schritt-Anleitung

Um ein Textfeld in einem Excel-UserForm automatisch auszufüllen, basierend auf dem Inhalt eines anderen Textfeldes, kannst Du die folgenden Schritte befolgen:

  1. UserForm erstellen: Öffne den VBA-Editor (ALT + F11) und füge ein neues UserForm hinzu.

  2. TextBoxen hinzufügen: Füge zwei TextBoxen hinzu – eine für die PLZ (z.B. TextBox6) und eine für den Ort (z.B. TextBox7).

  3. Code für TextBox6: Füge in den Code der UserForm folgenden VBA-Code ein:

    Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
       Dim PLZ As Long
       PLZ = TextBox6.Value * 1
       For Each zelle In Worksheets("Lieferanten").Range("F:F")
           If zelle.Value = PLZ Then
               TextBox7.Value = Worksheets("Lieferanten").Cells(zelle.Row, 7).Value
               Exit Sub
           End If
       Next
       MsgBox "PLZ nicht gefunden!", vbInformation
    End Sub
  4. UserForm testen: Führe das UserForm aus und teste die Eingabe einer PLZ in TextBox6. Der zugehörige Ort sollte automatisch in TextBox7 erscheinen.


Häufige Fehler und Lösungen

  • Fehler: "Variable nicht definiert": Stelle sicher, dass alle Variablen korrekt deklariert sind. Füge eine Dim-Anweisung für jede Variable hinzu.

  • Fehler: "PLZ nicht gefunden": Überprüfe, ob die PLZ tatsächlich in der Tabelle vorhanden ist. Stelle sicher, dass die Tabelle "Lieferanten" korrekt benannt ist und die PLZ in der richtigen Spalte steht.

  • Formel nicht aktiv: Wenn die TextBox nicht reagiert, stelle sicher, dass der Code im richtigen Ereignis (z.B. Exit oder Change) platziert ist.


Alternative Methoden

  1. VLOOKUP verwenden: Anstelle einer Schleife kannst Du die VLOOKUP-Funktion verwenden, um den Ort basierend auf der PLZ zu finden. Beispiel:

    Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
       On Error Resume Next
       TextBox7.Value = Application.WorksheetFunction.VLookup(TextBox6.Value, Worksheets("Lieferanten").Range("F:G"), 2, False)
       If Err.Number <> 0 Then
           MsgBox "PLZ nicht gefunden!", vbInformation
           Err.Clear
       End If
    End Sub
  2. Access-Datenbank: Falls Du mit einer Access-Datenbank arbeitest, kannst Du die Daten dort ebenfalls speichern und abrufen.


Praktische Beispiele

Hier ist ein einfaches Beispiel:

  • UserForm: Du hast ein UserForm mit zwei TextBoxen (TextBox6 für PLZ und TextBox7 für Ort).
  • Daten in Excel: In der Tabelle "Lieferanten" sind die PLZ in Spalte F und die Orte in Spalte G.

Sobald Du eine gültige PLZ in TextBox6 eingibst und das Feld verlässt, wird der entsprechende Ort automatisch in TextBox7 angezeigt.


Tipps für Profis

  • Datenvalidierung: Füge Validierungen hinzu, um sicherzustellen, dass nur gültige PLZ eingegeben werden können.
  • Benutzerfreundlichkeit: Verwende Tooltips oder Labels, um den Benutzern zu helfen, die richtigen Eingaben zu machen.
  • Optimierung der Performance: Wenn Du mit großen Datenmengen arbeitest, achte darauf, die Suchvorgänge zu optimieren, um die Performance der UserForm zu verbessern.

FAQ: Häufige Fragen

1. Frage
Wie kann ich sicherstellen, dass die PLZ immer 5-stellig ist?
Antwort
Du kannst die Eingabe in TextBox6 vor der Verarbeitung validieren, indem Du den Wert formatierst:

TextBox6.Value = Format(TextBox6.Value, "00000")

2. Frage
Kann ich die Funktion auch für andere Daten nutzen?
Antwort
Ja, Du kannst die Logik anpassen, um andere Daten wie Namen oder Adressen automatisch auszufüllen, indem Du die entsprechenden Spalten in Deiner Tabelle verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige