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

Forumthread: TextBox in Abhängikeit von Wert aus ListBox füllen

TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 08:19:00
Wert
Hallo Excelfreunde
wurde bereits bei dieser Aufgabe schon einmal geholfen.
Habe aber noch ein Problem damit
Es sollen noch die TextBoxen in Abhängigkeit zur Auswahl in der ListBox1 dementsprechend gefüllt werden.
Also folgendes:
Ich habe eine Tabelle „Adressen“ Beginnend mit Datensätzen in Zeile3 (In Zeile 2 stehen die Überschriften)
Überschriften: A2 = „Kategorie“
B2 = „Untergategorie“
C2 = „Text1“
D2 = „Text2“
E2 = „ID-Nummer“ (ist eine Fortlaufende Nummer)
Folgendes passiert: Wenn ich in der UserForm1 durch Auswahl in der ComboBox 1 (Werte werden aus Spalte A eingelesen) einen Wert anklicke, wird durch dessen Auswahl die ListBox1 gefüllt( Werte aus Spalte B) Das funktioniert auch.
Mein Problem ist folgendes:
Ich muß mein Makro dahingehend vervollständigen, das wenn ich einen Eintrag in der ListBox1 anklicke die entsprechenden Textboxen mit den dazugehörigen Datensätzen aus Tabelle „Adressen) gefüllt werden.
TextBox1 = Wert aus Tabelle „Adressen“ Spalte A
TextBox2 = Wert aus Tabelle „Adressen“ Spalte B
TextBox3 = Wert aus Tabelle „Adressen“ Spalte C
TextBox4 = Wert aus Tabelle „Adressen“ Spalte D
TextBox5 = Wert aus Tabelle „Adressen“ Spalte E
Wie müsste ich das Makro dahingehend noch ändern?

Private Sub ComboBox1_Click()
'füllt die ComboBox1 und ListBox1 mit den Datensätzen
Dim strAuswahl As String, vntTmp(), iTmp As Integer
Dim i As Integer
'ComboBox2.Clear
ListBox1.Clear
strAuswahl = UserForm1.ComboBox1.Text
i = 2
With Sheets("Adressen")
Do While .Cells(i, 1)  ""
If .Cells(i, 1) = strAuswahl And _
WorksheetFunction.CountIf(.Range(.Cells(2, 2), .Cells(i, 2)), .Cells(i, 2)) = 1 Then
iTmp = iTmp + 1
ReDim Preserve vntTmp(1 To iTmp)
vntTmp(iTmp) = .Cells(i, 2)
End If
i = i + 1
Loop
End With
If iTmp > 0 Then
QuickSort vntTmp    'hier wird auf das Makro '

Private Sub QuickSort' zugegriffen
'ComboBox2.List = WorksheetFunction.Transpose(WorksheetFunction.Transpose(vntTmp))
ListBox1.List = WorksheetFunction.Transpose(WorksheetFunction.Transpose(vntTmp))
bis hierher funktioniert es auch so weit
'hier sollen jetzt anhand des entsprechend gewählten Eintrages aus der ListBox1
'die Daten aus der Tabelle "Adressen" dementsprechend in die TextBox'en übernommen werden
'so wie der Code ab hier läuft funktioniert das aber nicht
'wie muß das geändert werden, bzw. an welche Stelle muß die Code Zeilen einfügen
'damit der die Auswahl aus ListBox1 in die TextBox geschrieben wird
Dim r%
'ListBox1.Clear
r = ListBox1.ListIndex + 3
ListBox1.Text = Sheets("Adressen").Cells(r, 2) 'Leistung für:
TextBox1.Text = Cells(r, 1)       'Eingabe Kategorie
TextBox16.Text = Cells(r, 2)      'Eingabe Unterkategorie
TextBox17.Text = Cells(r, 3)      'Eingabe Betreff Zeile
TextBox15.Text = Cells(r, 4)      'Eingabe Textbaustein
TextBox14.Text = Cells(r, 5)      'ID.Nr.
End If
End Sub



Private Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
Dim V_val1, V_val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_array, 1)
End If
If IsMissing(V_high1) Then
V_high1 = UBound(VA_array, 1)
End If
V_Low2 = V_Low1
V_high2 = V_high1
V_val1 = VA_array((V_Low1 + V_high1) / 2)
While (V_Low2  V_val1 And _
V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2  V_Low1) Then Call _
QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 


Vielen Dank nochmals
Den Lösungsansatz hatte ich schon von Rudi Maintaire erhalten nochmals vielen Dank
Gruß Andreas

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 08:32:00
Wert
Hallo Andreas,
ich würde ja vermuten der Code läuft nicht da im Code 2x das Ereignis Private Sub QuickSort vorhanden ist!
Ich hätte ja vermutet ein Beispiel wäre besser gewesen, dann muss man nicht die Zeit investieren um das nachzubauen und man hat auch gleich ein Programm das läuft wie beschrieben.

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 09:48:56
Wert
Hallo Hajo
erst mal vielen Dank für die schnelle Antwort
ich habe nur ein Problem mit der Datei zum hochladen, da ich auf der Arbeit bin und Dateien zum hoch und runterladen generell gesperrt sind
wie gesagt der Code läuft problemlos. die ComboBox1 wird mit Werten aus Tabelle Adressen Spalte A gefüllt. wenn ein Wert in TextBox1 angeklickt wird füllt sich die ListBox1 bis dahin alles Problemlos.
Jetzt soll nur wenn ich einen Wert in der ListBox1 anklicke die Werte aus Tabelle Adressen (in diesem Beispiel Spalte B) aus der dazugehörigen Zeile in die Textboxen eingetragen werden.
nochmals danke
Gruß Andreas

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 10:00:00
Wert
Hallo Andreas,
ich gehe davon aus das die Listbox komplett gefüllt ist.

Private Sub ListBox1_Change()
If ListBox1.Tag  "" Then Exit Sub
TextBox1 = ListBox1.List(ListBox1.ListIndex, 0)
TextBox2 = ListBox1.List(ListBox1.ListIndex, 1)
TextBox3 = ListBox1.List(ListBox1.ListIndex, 2)
TextBox4 = ListBox1.List(ListBox1.ListIndex, 3)
TextBox5 = ListBox1.List(ListBox1.ListIndex, 4)
TextBox6 = ListBox1.List(ListBox1.ListIndex, 5)
TextBox7 = ListBox1.List(ListBox1.ListIndex, 6)
End Sub


Gruß Hajo

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 10:43:39
Wert
Hallo Hajo
nochmals Danke für die schnelle Antwort
bei deinem Makro (habe es in die UserForm kopiert) kommt dann die Fehlermeldung wenn ich auf einen Eintarg in der ListBox1 klicke die Fehlermeldung Variable nicht definiert
Bitte Hilfe
Gruß Andreas

AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 10:49:00
Wert
Hallo Andreas,
den Namen des Steuerelementes hast Du schon angepast?
Gruß Hajo

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 12:06:00
Wert
Hallo Hajo
kannst Du mir mal den Code erklären
kommt immer noch die gleiche Fehlermeldung
ListBox1 stimmt bei mir.
Was bedeutet die Zahl hinter (ListBox1.ListIndex, 3) auf was bezieht sich hier zB. die 3 und warum hast du in deinem Makro mit 0 begonnen.
ich habe leider noch nich allzuviel Ahnung von VBA
möchte es aber dennoch verstehen
Wie gesagt bei mir beginnen die Datensätze in Tabelle Adressen ab Zeile 3 in Zeile 2 stehen die Überschriften.
Muß ich eventuell im Code ComboBox1_Click noch etwas ändern und wenn ja wo muß ich das ich ändern?
nochmals danke
Andreas

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 12:14:00
Wert
Hallo Andreas,
die 3 bedeutet die 4 Spalte in der Listbox.
Gruß Hajo

AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 13:08:35
Wert
Hallo Hajo
ich habe aber nur eine Spalte in meiner ListBox
ist wohl doch etwas schwieriger als ich dachte
werde wohl doch heut Abend von zu Hause aus die Datei mal hochladen
melde mich dann nochmals
trotzdem Danke
Andreas

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 13:44:06
Wert
Hallo Andreas,
ich hatte geschrieben das die Listox komplett gefüllt ist, das bedeutet mit allen Spalten.
Ich arbeite mich nun nicht in Deinen Code ein und baue das Beispiel nach (ein Nachbau sieht immer anders aus als das Original)
Gruß Hajo

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 17:36:00
Wert
Hallo Hajo
Hallo Excelfreunde
habe mal die Datei hochgeladen
vielleicht kannst Du mir jetzt besser helfen
entschuldige bitte aber das ging nicht eher, da ich wie bereits gesagt die datei vom Geschäft her nicht hoch und runterladen kann
https://www.herber.de/bbs/user/44363.xls
nochmals Danke
Andreas

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 18:34:00
Wert
Hallo Andreas,
ich vermute mal Du hast schon Stunden mit der Datei zugebracht. Du brauchst keine Anleitung. Ich habe die Datei jetzt das erste mal gesehen. Wäre da eine Anleitung was man machen muss gut?
Gruß Hajo

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 19:48:29
Wert
Hallo Hajo
ja ich habe schon Stunden dami verbracht
Diese Datei soll als Textbausteinprogramm letztendlich dienen
ich möchte im Formularfenster in der ComboBox1 (Suchen-Textbaustein_Kategorie) eine Kategorie auswählen. Danach sollen in die ListBox1(Suchen-Textbaustein_Untergategorie) die zu der Kategorie (Suchen-Textbaustein_Kategorie) entsprechenden Datensätze ausgewählt werden können. bei der Auswahl aus ListBox1(Suchen-Textbaustein_Untergategorie) sollen dann die entsprechenden Datensätze aus der Tabelle "Adressen " dementsprechend ausgelesen werden und die Textboxen eingetragen werden.
Hier will ich dann zB in der TextBox15 (Auswahl_Text) den Text kopieren und zB.in ein Word-Dokument wieder einfügen.
Also die Auswahl in ListBox1 entspricht zB. der Tabelle "Adressen" Spalte B Zeile 5 dann sollen durch die Auswahl des Eintrages aus der ListBox1 in die TextBox15 der Inhalt aus Zeile 5 aber Spalte D eingetragen werden, in die TextBox17 der Inhalt aus der gleichen Zeile Zeile 5 aber Spalte C eingetragen werden usw.
Mit dem Button "Neuer Datensatz" mache ich alle TextBoxen wieder leer wo ich dann einen neuen Textbaustein erstellen kann und mit Button "Eintragen" in das Tabellenblatt Adressen an die letzte Stelle eintrage.
Ist das als Anleitung was das Programm letztendlich machen soll so verständlich?
Ich hoffe Du kannst mir bei meinem letzten Schritt noch helfen
Danke nochmals für Deine Mühe und Zeit
Gruß Andreas

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 19:56:00
Wert
Hallo Andreas,
Du mußt immer bedenken ich habe nicht neben Dir gesessen als Du das Ding erstellt hast. Benutze Deine Anleitung und Du wirst gleich beim ersten Punkt feststellen das was fehlt. In Combbox1 kann keine Kategorie ausgewählt werden. Schreibe jede Aktion auf die Du machst und teste dann Deine Beschreibung.
Ich befasse mich Heute nicht mehr mit so umfangreichen Problemen.
Gruß Hajo

Anzeige
AW: TextBox in Abhängikeit von Wert aus ListBox füllen
23.07.2007 10:18:00
Wert
Hallo Hajo
erst mal vielen dank für Deine schnelle Antwort
Ich habe nur das Problem, da ich auf der Arbeit keine Dateien zum Server hoch und runterladen kann weil dies bei uns generell gesperrt ist.
Der Code läuft ja so weit Problemlos.
das heißt in ComboBox1 werden die Daten aus Tabelle Adressen Spalte A eingelesen. nach klick auf einen Eintrag in ComboBox1 werden die zugehörigen Daten aus Tabelle Adressen Spale B dementprechend in ListBox1 eingelesen.
Wie gesagt bis hierhin läuft der Code Problemlos
Jetzt soll aber bei Click auf einen Eintag in ListBox1 die dazugehörigen Werte aus Tabelle Adressen aus der gleichen Zeile des ausgewählten Eintrages aus ListBox1 in die Textboxen eingelesen werden
genau diese Codezeilen müßten in mein Makro so eingebaut werden
nochmals vielen dank
Gruß Andreas
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

TextBox in Abhängigkeit von ListBox füllen


Schritt-für-Schritt-Anleitung

Um die TextBoxen in einer UserForm in Abhängigkeit von der Auswahl in einer ListBox zu füllen, gehe wie folgt vor:

  1. Initialisierung der ComboBox: Wenn der Benutzer eine Kategorie in der ComboBox auswählt, soll die ListBox mit den entsprechenden Unterkategorien gefüllt werden. Verwende dazu den folgenden VBA-Code in der ComboBox1_Click-Ereignisprozedur:

    Private Sub ComboBox1_Click()
        Dim strAuswahl As String, vntTmp(), iTmp As Integer
        ListBox1.Clear
        strAuswahl = UserForm1.ComboBox1.Text
        i = 2
        With Sheets("Adressen")
            Do While .Cells(i, 1) <> ""
                If .Cells(i, 1) = strAuswahl Then
                    iTmp = iTmp + 1
                    ReDim Preserve vntTmp(1 To iTmp)
                    vntTmp(iTmp) = .Cells(i, 2) ' Spalte B
                End If
                i = i + 1
            Loop
        End With
    
        If iTmp > 0 Then
            ListBox1.List = WorksheetFunction.Transpose(vntTmp)
        End If
    End Sub
  2. Füllen der TextBoxen: Wenn ein Eintrag in der ListBox ausgewählt wird, sollen die entsprechenden Werte aus der Tabelle "Adressen" in die TextBoxen übernommen werden. Füge den folgenden Code in die ListBox1_Change-Ereignisprozedur ein:

    Private Sub ListBox1_Change()
        Dim r As Integer
        r = ListBox1.ListIndex + 3 ' +3 wegen der Zeilenüberschrift
        TextBox1.Text = Sheets("Adressen").Cells(r, 1).Value ' Kategorie
        TextBox2.Text = Sheets("Adressen").Cells(r, 2).Value ' Unterkategorie
        TextBox3.Text = Sheets("Adressen").Cells(r, 3).Value ' Text1
        TextBox4.Text = Sheets("Adressen").Cells(r, 4).Value ' Text2
        TextBox5.Text = Sheets("Adressen").Cells(r, 5).Value ' ID-Nummer
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Variable nicht definiert
    Überprüfe, ob alle Steuerelemente (z.B. ListBox1, TextBox1) korrekt benannt sind. Stelle sicher, dass die Namen in deinem Code mit denen in der UserForm übereinstimmen.

  • Fehler: ListBox bleibt leer
    Stelle sicher, dass die Daten in der Tabelle "Adressen" korrekt formatiert sind und dass die ComboBox mit den richtigen Werten gefüllt wird.

  • Fehler: Index außerhalb des gültigen Bereichs
    Dieser Fehler tritt auf, wenn du versuchst, auf einen ListBox-Index zuzugreifen, der nicht existiert. Achte darauf, dass die ListBox tatsächlich Einträge enthält, bevor du darauf zugreifst.


Alternative Methoden

Eine alternative Methode, um die TextBoxen zu füllen, wäre die Verwendung von ActiveX-Steuerelementen anstelle von Formularsteuerelementen. ActiveX-Steuerelemente bieten mehr Flexibilität und können direkt in die UserForm integriert werden.


Praktische Beispiele

Angenommen, du hast folgende Daten in deiner Tabelle "Adressen":

Kategorie Unterkategorie Text1 Text2 ID-Nummer
A A1 Text A1 Text B1 1
A A2 Text A2 Text B2 2
B B1 Text B1 Text C1 3

Wenn du in der ComboBox "A" auswählst, sollte die ListBox die Unterkategorien "A1" und "A2" anzeigen. Bei Auswahl von "A1" werden die entsprechenden TextBoxen mit "A", "A1", "Text A1", "Text B1" und "1" gefüllt.


Tipps für Profis

  • Verwende Error-Handling: Integriere Error-Handling in deinen Code, um unerwartete Fehler abzufangen und die Benutzererfahrung zu verbessern.

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Vermeide redundante Codezeilen: Halte deinen Code sauber und vermeide doppelte Definitionen, insbesondere bei Subroutinen wie QuickSort.

  • Dokumentation: Kommentiere deinen Code gut, um die Funktionsweise und die Logik für zukünftige Nachbearbeitungen verständlich zu machen.


FAQ: Häufige Fragen

1. Was muss ich tun, wenn die TextBoxen leer bleiben?
Überprüfe, ob die ListBox tatsächlich gefüllt ist und ob die Indizes in der ListBox1_Change-Prozedur korrekt sind.

2. Wie kann ich die UserForm speichern, nachdem ich die Daten eingegeben habe?
Du kannst einen "Speichern"-Button hinzufügen, der die Daten in die Tabelle "Adressen" schreibt, indem du die Werte aus den TextBoxen in die entsprechenden Zellen einfügst.

3. Kann ich die Daten aus den TextBoxen in ein Word-Dokument kopieren?
Ja, du kannst VBA verwenden, um die Daten aus den TextBoxen in ein Word-Dokument zu übertragen. Hierfür benötigst du eine Referenz auf die Word-Bibliothek.

4. Was bedeutet die Zahl hinter ListBox1.ListIndex?
Die Zahl gibt die Zeile in der ListBox an, die aktuell ausgewählt ist. Bedenke, dass der Index in VBA bei 0 beginnt. Daher musst du die Zeile, die du ansprechen möchtest, entsprechend anpassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige