Visual Basic: Listbox automatisch befüllen und nach Anklicken eines Elementes in eine Textbox übertragen.

  • Excel

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Visual Basic: Listbox automatisch befüllen und nach Anklicken eines Elementes in eine Textbox übertragen.

    So sieht mein erfolgloses tun bisher aus:

    Private Sub ListBox1_Click()
    If ListBox1.ListIndex >= 0 Then
    lZeile = 2
    Do While Trim(CStr(Tabelle3.Cells(lZeile, 1).Value)) <> ""
    Loop
    End If
    End Sub

    bin nach wie vor absoluter Anfänger und freue mich über eure Nachsicht ;)

    PapavZ schrieb:

    bin nach wie vor absoluter Anfänger
    Das sollte aber nicht Verhindern, dass du dein Problem genau genug beschreibst, dass andere deine Gedankengänge nachvollziehen können.

    Ich kann nur raten:

    Visual Basic-Quellcode

    1. ​Private Sub ListBox1_Change()
    2. TextBox2.Text = ListBox1.Text
    3. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Guten abend, sorry.
    Ich war so in meinen Versuchen, das ich dich/euch nicht mitgenommen habe.

    ich habe meine Tabelle1, in der ich die Spalten mit hilfe der Eingabemaske ausfüllen möchte.
    Nun habe ich immer wiederkehrende Begriffe (Tabelle2 zb. a1 rot, a2 blau etc)
    diese möchte ich in der Maske als auswahl zum anklicken (ich denke als Listbox) um dann - nach dem Anklicken - den Begriff in meiner Textbox wieder zu finden.

    Ich habe deine Formel mal in meine eingebaut, kann aber die Listbox damit nicht füllen :-/

    Danke schonmal für die nächsten Hilfestellungen
    Hey @PapavZ

    Hab mal was ähnliches gemacht
    1. Wenn die Form aktiviert wird folgender Code

    Spoiler anzeigen

    Quellcode

    1. Private Sub UserForm_Activate()
    2. If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
    3. End Sub


    2. Laden der Listbox
    Spoiler anzeigen

    Quellcode

    1. Private Sub UserForm_Initialize()
    2. Dim lZeile As Long
    3. 'Leeren aller TextBoxen
    4. TextBox1 = ""
    5. TextBox2 = ""
    6. 'usw.
    7. ListBox1.Clear '
    8. lZeile = 2
    9. Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
    10. ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
    11. lZeile = lZeile + 1
    12. Loop


    3. Übernehmen wenn in der ListBox etwas angeklickt wird
    Spoiler anzeigen

    Quellcode

    1. Private Sub ListBox1_Click()
    2. Dim lZeile As Long
    3. 'Alle TextBoxen leeren
    4. TextBox1 = ""
    5. TextBox2 = ""
    6. ' usw.
    7. If ListBox1.ListIndex >= 0 Then
    8. lZeile = 2
    9. Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
    10. If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
    11. 'TextBoxen füllen
    12. TextBox1 = Trim(CStr(Tabelle1.Cells(lZeile, 9).Value))
    13. TextBox2.Text = Tabelle1.Cells(lZeile, 2).Value
    14. ' und so weiter und so fort...
    15. Exit Do
    16. End If
    17. lZeile = lZeile + 1
    18. Loop
    19. End If
    20. End Sub



    wichtig ist einfach das in der ListBox keine doppelten Namen oder Nummer vorhanden sind.
    Die Werte der ListBox werden aus Spalte A ausgelesen
    Gruss Mirco
    Guten Morgen,

    wie schreibe ich eigentlich eine Kopierfunktion?

    Ich habe zwar schon einen Butten installiert :evil:

    komme aber mit dem Past und Copy nicht klar.

    Ich möchte einen kompletten Datensatz kopieren und dann als neuen Datensatz unten anfügen.

    Wäre super wenn da eine Hilfe kommen würde :thumbsup:

    SWE
    Und wieder ist deine Frage extrem undeutlich formuliert.
    Wenn du die die Zeile der momentan ausgewählten Zelle nach unten kopieren willst:

    Visual Basic-Quellcode

    1. Selection.EntireRow.Copy Tabelle1.Cells(Rows.Count,1).End(xlup).Offset(1)

    Ansonsten halt Selection durch ein entsprechendes Range-Objekt ersetzen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Guten morgen,
    Danke für deinen Tip.

    Habe nun folgendes in meinem Programm stehen:


    Private Sub CommandButton5_Click()

    Selection.EntireRow.Copy Tabelle1.Cells(Rows.Count, 1).End(xlUp).Offset(1)

    End Sub

    es tut sich folgendes:
    ich bin im Feld a27 in meiner Tabelle, der komplette Dtensatz aus Zeile 27 wird als Copy an meine Tabelle unten angehängt.
    soweit so gut.
    Ich hätte aber gerne die Luxusvariante, das ich in meiner Eingabemaske einen Datensatz angeklicke und der dann kopiert wird.

    Wäre schön wenn du mir den passenden Befehl dafür auch nennen könntest.

    Danke schonmal.
    das ich in meiner Eingabemaske einen Datensatz angeklicke​ und der dann kopiert wird.


    Was genau meinst du damit?
    Versuch bitte GENAU zu beschreiben, was du möchtest. Erkläre es am besten so, als wäre ich geistig zurückgeblieben.
    Das ist meine Signatur und sie wird wunderbar sein!
    8o

    ich bin in meiner Eingabemaske und habe einen Datensatz in der Bearbeitung.
    Nun möchte ich genau diesen Datensatz duplizeiren als neuen Datensatz am Ende der Liste.
    (Kundendaten mit Lieferadresse Stammwerk in Bearbeitung, ich möchte die selben Daten (Bank etc) auch für seine Filiale anlegen, so das ich nur noch die Adresse im neuen Datensatz abändern muss)

    Mit dem von dir bisher geschriebenen Befehl dupliziert er mir den Datensatz (die Zeile) in dem direkt im excel Sheet (also ohne Eingabemaske) eine Zelle bearbeitet wird.
    Was ist deine Eingabemaske? Was ist der Datensatz in deiner Eingabemaske? Ans Ende welcher Liste?

    Ich habe bisher keinen einzigen Befehl oder Code hier gepostet. Die Zeile von @petaod kopiert die gesamte(n) Zeile(n) des aktuell selektierten Bereiches eines Excelsheets ans Ende des Excelsheets namens Tabelle1.
    Das ist meine Signatur und sie wird wunderbar sein!
    @PapavZ

    1) Wähle den zu kopierenden "Text" in der Listbox an
    2) mach einen Button [Kopieren] und nimm den selben Code wie der wenn du einen Neuen Eintrag erstellst OHNE die TetxBoxen zu leere => TetxBox1 = ""
    3) dann hängst du noch den Speicherbefehl dran

    => Befehl auslösen => Tetx steht schon drin => speicherbefehl wird auch gleich ausgeführt und das alles in einem Befehl :thumbup:
    Gruss Mirco
    'kopieren
    Private Sub CommandButton5_Click()

    Selection.EntireRow.Copy Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1)

    Dim lZeile As Long
    lZeile = 2
    Do While Trim(CStr(Tabelle2.Cells(lZeile, 1).Value)) <> ""
    lZeile = lZeile + 1
    Loop
    Tabelle2.Cells(lZeile, 1) = CStr(1 & lZeile)
    ListBox1.AddItem CStr(1 & lZeile)
    ListBox1.ListIndex = ListBox1.ListCount - 1
    End Sub


    So sieht es bei mir nun aus.
    Allerdings kopiert er nun nicht den in der Listbox1 kopierten Kundendatensatz, sondern immer noch abhängig von der im Excelsheet benutzen Zeile. ;(

    PapavZ schrieb:

    abhängig von der im Excelsheet benutzen Zeile
    Die nennt sich Selection.
    Du musst also diesen Ausdruck ersetzen durch den von dir gewünschten Range.
    Welcher das ist, mag sich mir aufgrund deines chaotischen Codes nicht so richtig erschließen.
    Möglicherweise meinst du ​Tabelle2.Cells(lZeile, 1).
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    ich möchte in der Listbox1 einen Datensatz markieren und diesen als erste freie Zeile unter meine Datenzeilen als Kopie einfügen.
    Am besten auch so, das die Namensgebung des datensatzes automatisch weitergezählt wird.
    Bisher heißen die Datensätze: Vat und die Zeilennummer aslo zb. "vat 137" in der 137.ten Zeile