Anzeige
Archiv - Navigation
1956to1960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox mit Eingabe füllen

Listbox mit Eingabe füllen
03.12.2023 20:16:30
EberhardDaniel
Guten Abend
Ich versuche schon der ganze Sonntag unterstehender Code (Nr.2) zu schreiben dass er auch funktioniert. Mit dem ersten Code fülle ich eine Listbox in einer UserForm.



Private Sub UserForm_Initialize()

Dim rng As Range
Set rng = Tabelle1.Range("A1").CurrentRegion
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)

With Me.ListBox1
.RowSource = rng.Address(external:=True)
.ColumnCount = rng.Columns.Count
.ListIndex = 0
End With

End Sub



Mit diesem Code sollte es alle Einträge welche den Buchstaben oder Zahl in Spalte "A" enthalten anzeigen. Aber irgendwie komme ich nicht auf die Lösung.



Private Sub TextBox1_Change()

Dim rng As Range
Dim Zeile As Integer
Dim LetzteZeile As Integer

LetzteZeile = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To LetzteZeile
If InStr(1, LCase(Tabelle1.Cells(i, 1).Value), LCase(Me.TextBox1.Value)) > 0 Then
Set rng = Tabelle1.Range("A" & i).Rows
With Me.ListBox1
.RowSource = rng.Address
End With
End If
Next i

End Sub



Kann mir da jemand behilflich sein?

Freundliche Grüsse Daniel Eberhard

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox mit Eingabe füllen
03.12.2023 21:36:59
ralf_b
mit rowsource gibst du einen Adressbereich an. Entweder du filterst die Tabelle( ich weis aber nicht ob das so funktioniert) oder du weist der Listbox die Daten mit der List Eigenschaft zu. Mit Additem geht das auch hat aber seine Einschränkungen. List und Rowsource vertragen sich nicht.
Eine rowsource weist man einmal zu und nicht in einer Schleife. Damit würde sich der Wert immer überschreiben.

AW: Listbox mit Eingabe füllen
05.12.2023 11:26:57
Daniel Eberhard
Guten Tag
Nun habe ich eine Lösung gefunden. Weis aber nicht wie weiter.

Mit diesem Code befülle ich die Listbox:


Private Sub UserForm_Initialize()
Dim rng As Range
Set rng = Tabelle1.Range("A1").CurrentRegion
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)

With Me.ListBox1
.List = rng.Value
.ColumnCount = rng.Columns.Count
.ListIndex = 0
End With
End Sub


Mit diesem Code filtere ich die Listbox:


Private Sub TextBox1_Change()
Dim Zahl As Integer
Dim varDat As Variant
Dim intSpalte As Integer
Dim intZeile As Integer
Dim intAnz As Integer
Dim i As Long
Dim LetzteZeile As Integer

LetzteZeile = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row

ReDim varDat(LetzteZeile, 11)

Me.ListBox1.ColumnCount = 11
Me.ListBox1.Clear

For intZeile = 2 To LetzteZeile
If InStr(1, LCase(Tabelle1.Cells(intZeile, 1).Value), LCase(Me.TextBox1.Value)) > 0 Then
For intSpalte = 1 To 11
varDat(intAnz, intSpalte - 1) = Tabelle1.Cells(intZeile, intSpalte).Value
Next intSpalte
intAnz = intAnz + 1
End If
Next intZeile

Me.ListBox1.List() = varDat

'Löscht die leeren Zeilen in Listbox
With ListBox1
For i = .ListCount - 1 To 0 Step -1
If .List(i, 0) & .List(i, 1) = "" Then .RemoveItem i
Next
End With
End Sub


Nun möchte ich auf eine Zeile in der Listbox einen Doppelklick machen. Danach brauchte ich doch irgendwie die Quellzeile zum Beispiel "A3" um diese weiter zu bearbeiten zu können. Den Befehl "Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)" kenne ich. Aber das weitere Vorgehen in dieser Sub weis ich nicht.

Besten Dank für Eure Hilfe.

Freundliche Grüsse
Daniel Eberhard
Anzeige
AW: Listbox mit Eingabe füllen
05.12.2023 13:18:49
Piet
Hallo

den Code für ListBox_BeiKlick kennst du ja schon. Du kannst den ListIndex auslesen und den angeklickten Text.
Die Quellzeile kannst du finden und bearbeiten, indem du die Zelle als Range(), angibst wo der Listindex=0 ist.
LIndx = ListBox1.ListIndex - mit Range ("A2").Offset(LIndx, 0) oder Range ("A2").Cells(LIndx, 1) erreichst du die Zelle, die du bearbeiten willst

Ob Offset oder Cells vorteilhafter ist bleibt dir überlassen. Ich benutze beide, je nachdem. Aber beachte bitte den feinen Unterschied!
Offset(0, 0) entspricht Cells(1, 1) ! - in beidenFällen bleibt es die angegebene Range Zelle. Anfänger tun sich schwer damit.
Offset(1, 0) geht eine Zeile nach unten, Offset(0, 1) geht eine Zeile nach rechts, Offset (2, 1) zwei unten, eine Rechts. Alles klar?

mfg Piet
Anzeige
AW: Listbox mit Eingabe füllen
06.12.2023 12:23:44
Daniel Eberhard
Hallo Piet
Danke für Deine Erklärung. Habe gestern Abend noch versucht Deine Erklärung umzusetzen. Leider hatte ich keinen Erfolg. Kannst Du mir das in einem Beispiel erklären? Mein mechanisch Hirn ist vermutlich zu dumm dafür. :-)

Freundliche Grüsse Daniel Eberhard
AW: Listbox mit Eingabe füllen
06.12.2023 22:42:29
Piet
Hallo

kein Gehirn ist dumm, man steht höchstens mal "auf dem Schlauch"! Dann komt kein Wasser.
Setze deinen Cursor mal in eine beliebige Zelle, markiere sie gelb, und starte das kleine Makro.
Dann siehst du mechanisch wie wir mit Offset programmieren, und jede Zelle erreichen können.

Wenn du in deiner Tabelle Daten hast, die du mit der UserForm bearbeiten willst, geht das am einfachsten über ListIndex.
Du legst mit Range("xxx") die erste Basiszelle fest, von da aus erreichst du mit Offset über Listindex die anderen Zellen.
Wenn es dir zu kompliziert ist lade eine kleine Beispieldatei hoch. Für mich am besten im Excle 2003 Format.

mfg Piet


  • Sub test()
    Txt = "ist die selektierte Adresse": GoSub msg
    Selection.Offset(1, 0).Select
    Txt = "Offset(1, 0) geht nach unten": GoSub msg
    Selection.Offset(-2, 0).Select
    Txt = "Offset(-1, 0) geht nach oben": GoSub msg
    Selection.Offset(1, 0).Select
    Selection.Offset(0, 1).Select
    Txt = "Offset(0, 1) geht nach rechts": GoSub msg
    Selection.Offset(0, -2).Select
    Txt = "Offset(0, -1) geht nach links": GoSub msg
    Selection.Offset(0, 1).Select
    Selection.Offset(1, 1).Select
    Txt = "Offset(1, 1) geht unten + rechts": GoSub msg
    Selection.Offset(0, -2).Select
    Txt = "Offset(1, -1) geht unten + links": GoSub msg
    Selection.Offset(-1, 1).Select
    Selection.Offset(-1, 1).Select
    Txt = "Offset(-1, 1) geht oben + rechts": GoSub msg
    Selection.Offset(0, -2).Select
    Txt = "Offset(0, -1) geht oben + links": GoSub msg
    Selection.Offset(1, 1).Select
    Txt = "Und zurück in Active Zelle: gosub msg "
    Exit Sub

    msg: Adr = Selection.Address(0, 0)
    MsgBox Adr & " => " & Txt
    Return
    End Sub
  • Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige