Textfeld automatisch füllen je nach vorigem Texfel

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Textfeld automatisch füllen je nach vorigem Texfel von: Gabi
Geschrieben am: 07.02.2005 09:24:52

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

Bild


Betrifft: AW: Textfeld automatisch füllen je nach vorigem Texfel von: RR
Geschrieben am: 07.02.2005 11:33:06

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


Bild


Betrifft: AW: Textfeld automatisch füllen je nach vorigem Te von: Gabi
Geschrieben am: 07.02.2005 13:35:41

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


Bild


Betrifft: ...es geht natürlich auch einfacher... von: RR
Geschrieben am: 07.02.2005 14:18:48

...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


Bild


Betrifft: AW: ...es geht natürlich auch einfacher... von: Gabi
Geschrieben am: 07.02.2005 17:43:58

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


Bild


Betrifft: eine erste Lösung von: Gabi
Geschrieben am: 07.02.2005 20:29:24

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


Bild


Betrifft: AW: eine erste Lösung von: RR
Geschrieben am: 08.02.2005 08:24:29

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) <- löschen. Beim Verlassen der Textbox (Exit) wird der Code abgearbeitet und wenn die PLZ nicht gefunden wird, der Focus wieder auf die Textbox8 gesetzt.



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


Bild


Betrifft: AW: eine erste Lösung - funktionier so nicht richt von: Hallo RR,
Geschrieben am: 08.02.2005 09:55:42

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) <- löschen.
[/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


Bild


Betrifft: AW: eine erste Lösung - funktionier so nicht richt von: RR
Geschrieben am: 08.02.2005 10:14:58

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


Bild


Betrifft: AW: eine erste Lösung - funktionier so nicht richt von: Gabi
Geschrieben am: 10.02.2005 13:56:05

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


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Textfeld automatisch füllen je nach vorigem Texfel"