Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1684to1688
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 füllen bestimmte Werte

Listbox füllen bestimmte Werte
07.04.2019 11:04:49
Peter
Hallo ihr Excelspezialisten,
ich benötige eure Hilfe. Ich fülle eine Listbox mit nachstehendem Code:
Dim i As Long 'benötigt für ListBox1
Dim Zeile As Long 'benötigt für ListBox1
Worksheets("Gesamtabrechnung").Activate
With Worksheets("Gesamtabrechnung")
Zeile = .Cells(.Rows.Count, 2).End(xlUp).Row
With Me.ListBox1
.Clear
.ColumnCount = 10
.ColumnWidths = "1,5cm;1,0cm;4cm;0cm;0cm;0cm;0cm;0cm;0cm;2cm"
For i = 2 To Zeile
.AddItem Cells(i, 1) 'SpalteA in erste Spalte
.List(.ListCount - 1, 2) = Cells(i, 2) 'SpalteB in zweite Spalte
' .List(.ListCount - 1, 3) = Cells(i, 3) 'SpalteC in dritte Spalte
' .List(.ListCount - 1, 4) = Cells(i, 4) 'SpalteD in vierte Spalte
' .List(.ListCount - 1, 5) = Cells(i, 5) 'SpalteE in fünfte Spalte
' .List(.ListCount - 1, 6) = Cells(i, 6) 'SpalteF in sechste Spalte
' .List(.ListCount - 1, 7) = Cells(i, 7) 'SpalteG in sechste Spalte
' .List(.ListCount - 1, 8) = Cells(i, 8) 'SpalteH in sechste Spalte
.List(.ListCount - 1, 9) = Cells(i, 9) 'SpalteI in sechste Spalte
Next
End With
End With
Num möchte ich aber gerne, dass nicht die gesamte Liste aufgelistet wird sondern
nur der Teil, welcher in der SpalteI grösser als "" ist.
Könnt ihr mir bitte hierbei helfen. Besten Dank.
Gruss
Peter

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox füllen bestimmte Werte
07.04.2019 11:15:12
Peter
Hallo ihr Excelspezialisten,
Nachtrag:
in der Spalte I sind Formeln.
Gruss
Peter
AW: Listbox füllen bestimmte Werte
07.04.2019 11:26:33
Werner
Hallo Peter,
teste:
Dim i As Long, Zeile As Long
With Worksheets("Gesamtabrechnung")
Zeile = .Cells(.Rows.Count, 2).End(xlUp).Row
Me.listbox1.Clear
Me.listbox1.ColumnCount = 10
Me.listbox1.ColumnWidths = "1,5cm;1,0cm;4cm;0cm;0cm;0cm;0cm;0cm;0cm;2cm"
For i = 2 To Zeile
If .Cells(i, 9).Value  "" Then
Me.listbox1.AddItem Cells(i, 1)
Me.listbox1.List(Me.listbox1.ListCount - 1, 2) = .Cells(i, 2)
Me.listbox1.List(Me.listbox1.ListCount - 1, 3) = .Cells(i, 3)
Me.listbox1.List(Me.listbox1.ListCount - 1, 4) = .Cells(i, 4)
Me.listbox1.List(Me.listbox1.ListCount - 1, 5) = .Cells(i, 5)
Me.listbox1.List(Me.listbox1.ListCount - 1, 6) = .Cells(i, 6)
Me.listbox1.List(Me.listbox1.ListCount - 1, 7) = .Cells(i, 7)
Me.listbox1.List(Me.listbox1.ListCount - 1, 8) = .Cells(i, 8)
Me.listbox1.List(Me.listbox1.ListCount - 1, 9) = .Cells(i, 9)
End If
Next
End With
Gruß Werner
Anzeige
es fehlt noch ein Punkt...
07.04.2019 11:27:52
Werner
Hallo Peter,
...hier vor dem Cells
Me.listbox1.AddItem .Cells(i, 1)
Gruß Werner
AW: klappt bestens ... weiteres Problem
07.04.2019 11:37:34
Peter
Hallo Werner,
das funktioniert einwandfrei. Jetzt habe ich aber ein Problem mit ListBox_Click:
<pre>Private Sub ListBox1_Click()
If ListBox1.ListIndex <> 0 Then
TextBox1 = Cells(ListBox1.ListIndex + 1, 9)
TextBox1.SetFocus
With TextBox1
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
TextBox1 = ""
End If
End Sub</pre>
~f~
Evtl. könnte auch der Code zum Zurückschreiben in Tabelle nicht mehr stimmen.
~f~
<pre>Private Sub CommandButton2_Click()
Dim xZeile As Long
With Worksheets("Gesamtabrechnung")
If Me.TextBox1 = "" Then Exit Sub
If Me.ListBox1.ListIndex = 0 Then
xZeile = [I65536].End(xlUp).Row + 1
Else
xZeile = Me.ListBox1.ListIndex + 1
End If
Cells(xZeile, 9) = Me.TextBox1
Me.TextBox1 = ""
Worksheets("GesamtabrechnungName").Columns("I:I").EntireColumn.AutoFit
Me.ListBox1.ListIndex = -1
End With
End Sub</pre>
Besten Dank für Deine Hilfe.
Gruss
Peter
Anzeige
AW: klappt bestens ... weiteres Problem
07.04.2019 11:49:54
Werner
Hallo Peter,
das kann so nicht mehr funktionieren, weil deine Listbox nicht mehr aus einem lückenlos zusammenhängenden Bereich deines Blattes gefüllt wird. Somit stimmt dann der Listindex + 1 nicht mehr mit dem Zeilenindex überein.
Unter Umständen wäre da was mit Find möglich. Das kann ich aber nicht sagen ohne deine Datei zu kennen.
Eine weitere Möglichkeit wäre, wenn du nicht wirklich alle Spalten deiner Listbox zwingend für die Daten aus der Tabelle brauchst, beim Füllen der Listbox die jeweilige Zeilennummer in eine Spalte der Listbox mit einzulesen und diese Spalte in der Listbox auzublenden. Dann könnte man die entsprechenden Daten über die Zeilennummer in der Listbox ansprechen.
Gruß Werner
Anzeige
AW: klappt bestens ... weiteres Problem
07.04.2019 12:23:37
Peter
Hallo Werner,
habe gerade festgestellt, dass wenn ich die Zeilennummern in Spalte K einfüge, geht AddItem nicht mehr, da über 10 Spalten. Ich könnte jedoch den Inhalt der Spalte J mit K tauschen.
Dann wäre die Spalte J die 10. Spalte und AddItem würde noch gehen.
Gruss
Peter
AW: klappt bestens ... weiteres Problem
07.04.2019 12:40:27
Werner
Hallo Peter,
ich sehe gerade, dass du deine Daten ja wohl immer in die erste freie Zeile deiner Tabelle schreibst. Dann ist doch die Zeile, aus der die Daten ursrpünglich gekommen sind, völlig wurst.
Private Sub CommandButton2_Click()
Dim xZeile As Long
If Me.TextBox1 = "" Then Exit Sub
With Worksheets("Gesamtabrechnung")
If Me.ListBox1.ListIndex > -1 Then
xZeile = .Cells(.Rows.Count, 9).End(xlUp).Offset(1).Row
.Cells(xZeile, 9) = Me.TextBox1
Me.TextBox1 = ""
End If
End With
Worksheets("GesamtabrechnungName").Columns("I:I").EntireColumn.AutoFit
Me.ListBox1.ListIndex = -1
Gruß Werner
Anzeige
AW: klappt bestens ... weiteres Problem
07.04.2019 13:03:53
Peter
Hallo Werner,
da habe ich Dich missverstanden.
In der Listbox benötige ich die Spalten A, B und I.
Und übertragen wird in die Textbox1 die Spalte I. Dort wird dann der Wert geändert und in die entsprechende Zeile der Spalte I zurück geschrieben.
Gruss
Peter
AW: klappt bestens ... weiteres Problem
07.04.2019 13:18:15
Peter
Hallo Werner,
die beiden Codes habe ich jetzt geändert:
Füllen der Listbox:
With Worksheets("Gesamtabrechnung")
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row
Me.ListBox1.Clear
Me.ListBox1.ColumnCount = 10
Me.ListBox1.ColumnWidths = "1,5cm;2cm;0cm;0cm;0cm;0cm;0cm;0cm;4cm;0cm"
For I = 2 To Zeile
If .Cells(I, 9).Value <> "" Then
Me.ListBox1.AddItem .Cells(I, 1)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(I, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(I, 3)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .Cells(I, 4)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = .Cells(I, 5)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = .Cells(I, 6)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = .Cells(I, 7)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = .Cells(I, 8)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = .Cells(I, 9)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = .Cells(I, 10)
End If
Next
End With
~f~
Übertrag in Textbox1:
~f~
<pre>Private Sub ListBox1_Click()
With Worksheets("Gesamtabrechnung")
If ListBox1.Tag <> "" Then Exit Sub
TextBox1 = ListBox1.List(ListBox1.ListIndex, 8)
TextBox1.SetFocus
With TextBox1
.SelStart = 0
.SelLength = Len(.Text)
End With
End With
End Sub</pre>
Jetzt fehlt noch der Code für Zurückschreibung in Tabelle.
Gruss
Peter
Anzeige
AW: klappt bestens ... weiteres Problem
07.04.2019 13:29:54
Werner
Hallo Peter,
was hälst du davon deine Mappe mal hochzuladen. Ich habe keine Lust auf Rätselraten.
Hier z.B.:
Me.ListBox1.ColumnWidths = "1,5cm;2cm;0cm;0cm;0cm;0cm;0cm;0cm;4cm;0cm"
For I = 2 To Zeile
If .Cells(I, 9).Value  "" Then
Me.ListBox1.AddItem .Cells(I, 1)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(I, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(I, 3)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .Cells(I, 4)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = .Cells(I, 5)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = .Cells(I, 6)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = .Cells(I, 7)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = .Cells(I, 8)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = .Cells(I, 9)
' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = .Cells(I, 10)
End If
Next
End With
Weshalb hast du denn eine 10-spaltige Listbox wenn du die meisen Spalten ausblendest? Zudem stellt sich die Frage weshalb du nicht alle Daten in die Listbox lädst? Oder warum hast du diverse Codezeilen zum Befüllen der Listbox auskommentiert?
Wenn ich das richtig sehe geht es dir wohl nur darum die Daten aus der Tabelle in die Listbox einzulesen, dann Änderungen in der Textbox (betreffend die Spalte I der Tabelle) vorzunehmen und dann die Daten wieder zurückzuschreiben.
Da stellt sich dann gleich wieder die nächste Frage: Vorher hast du doch irgendwann mal geschrieben, dass sich in Spalte I Formeln befinden! Die werden dann doch überschrieben!!
Gruß Werner
Anzeige
AW: klappt bestens ... weiteres Problem
07.04.2019 13:38:26
Peter
Hallo Werner,
leider kann ich die Datei nicht hochladen, da hier Daten enthalten sind, welche ich nicht öffentlich machen kann.
Aber Du hast es Richtig erkannt.
Ich habe eine Tabelle aus der ich in die Listbox 3 Spaltenwerte übertrage. Dann mit Markierung der Zeile in der Listbox den Wert aus Spalte I in die Textbox1 übertrage. Dort den Wert dann ändere und zurück in der Tabelle in Spalte I entsprechend der in der Listbox gewählten Zeile übertragen möchte.
Dabei ist es nur logisch, dass die Formel in der entsprechenden Zelle überschrieben wird. Die Formel ist nur dazu erforderlich, dass in der Spalte I ganz bestimmte Werte angezeigt werden.
Ich hoffe ich habe mich verständlich ausgedrückt.
Besten Dank für Deine Hilfe.
Gruss
Peter
Anzeige
AW: klappt bestens ... weiteres Problem
07.04.2019 14:22:01
Werner
Hallo Peter,
mal was grundsätzliches. Niemand braucht hier Originaldaten. Es ist ja wohl nicht zu viel verlangt, wenn du ein paar Datensätze mit Dummy-Daten hier hochlädst. Oder erwartest du allen Ernstes, dass sich hier jemand deine Datei nachbauen soll?
Jetzt ohne Datei mein letzter Versuch:
Listbox beim Initialisieren befüllen:
Private Sub UserForm_Initialize()
Dim i As Long, zeile As Long
Me.ListBox1.ColumnCount = 5
Me.ListBox1.ColumnWidths = "1,5cm;2cm;4cm;3cm;2cm"
With Worksheets("Tabelle1") 'Blattname an deine Verhältnisse anpassen
zeile = .Cells(.Rows.Count, 9).End(xlUp).Row
For i = 2 To zeile
If .Cells(i, 9).Value  "" Then
Me.ListBox1.AddItem .Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .Cells(i, 9)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = i
End If
Next
End With
End Sub
Listboxeintrag (Spalte J deiner Tabelle) in Textbox übergeben
Private Sub ListBox1_Click()
Me.TextBox1 = Me.ListBox1.List(Me.ListBox1.ListIndex, 3)
End Sub
Textboxeintrag nach Ändern, durch Klick auf Commandbutton in Tabelle schreiben
Private Sub CommandButton1_Click()
With Me.ListBox1
If .ListIndex > -1 Then
If Me.TextBox1  "" Then
'Blattname an deine Verhältnisse anpassen
Worksheets("Tabelle1").Cells(CLng(.List(.ListIndex, 4)), 9) = Me.TextBox1
.Clear
Call UserForm_Initialize
Me.TextBox1 = ""
Else
MsgBox "Bitte Wert im Textfeld erfassen."
Me.TextBox1.SetFocus
End If
Else
MsgBox "Bitte einen Eintrag auswählen."
End If
End With
End Sub
Die letzte Spalte der Listbox habe ich auf 2cm gesetzt, damit du siehst, dass dort die jeweilige Zeilennummer steht. Wenn du den Wert auf 0cm einstellst, dann wird das nicht mehr in der Listbox angezeigt.
Sollte das nicht so sein wie du es willst, dann steig ich hier ohne Beispielmappe aus.
Gruß Werner
Anzeige
AW: klappt bestens ... weiteres Problem
07.04.2019 14:25:17
Peter
Hallo Werner,
sieht sehr gut aus werde ich später prüfen.
Wünsche Dir noch einen schönen Sonntagnachmittag.
Gruss
Peter
..dann endlich zu und nicht offen !
07.04.2019 14:27:18
robert
AW: klappt bestens
07.04.2019 16:41:33
Peter
Hallo Werner,
habe Deine Version nun getestet und eingebaut.
Es funktioniert hervorragend. Vielen, vielen Dank.
Wünsche Dir noch eine schöne Zeit - bis zum nächsten Mal.
Gruss
Peter
Gerne u. Danke für die Rückmeldung. o.w.T.
07.04.2019 16:43:45
Werner
AW: klappt bestens ... weiteres Problem
07.04.2019 14:06:07
Peter
Hallo Werner,
ich glaube ich habe jetzt die Lösung:
Ich habe die Zeile ' Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = .Cells(I, 10) aktiviert.
Dadurch wird mir die Zeilennummer angezeigt. Kann aber wieder deaktiviert werden.
Bei ListBox1_click habe ich die Übernahme von Zeilennummer in Textbox2 eingefügt:
TextBox2 = ListBox1.List(ListBox1.ListIndex, 9) 'Übertrag Zeilennummer
und zuletzt habe ich zum Übertrag in die Tabelle den nachstehenden Code eingebaut:
<pre>Private Sub CommandButton45_Click()
Dim ZNr As String
ZNr = Me.TextBox2
With Worksheets("Gesamtabrechnung")
.Cells(ZNr, 9).Value = TextBox1.Value
End With
End Sub</pre>
Jetzt möchte ich die Bitten zu prüfen, ob irgend ein Fehler enthalten ist der Nachteilig wirkt oder wirken könnte.
Besten Dank
Gruss
Peter
Anzeige
AW: es fehlt noch ein Punkt...
07.04.2019 11:58:18
Peter
Hallo Werner,
der Übertrag von der Listbox in die Textbox funktioniert mit nachstehendem Code:
Private Sub ListBox1_Click()
If ListBox1.Tag <> "" Then Exit Sub
TextBox1 = ListBox1.List(ListBox1.ListIndex, 9)
TextBox1.SetFocus
With TextBox1
.SelStart = 0
.SelLength = Len(.Text)
End With
Jetzt fehlt noch die Rückschreibung von Textbox in Tabelle.
Ich könnte die Zeilennummern in der Spalte K unterbringen.
Wie würde es dann aussehen? Kannst Du mir hierbei bitte helfen.
Gruss
Peter
AW: es fehlt noch ein Punkt...
07.04.2019 12:22:22
Werner
Hallo Peter,
ich spreche hier nicht von einer Spalte auf dem Tabellenblatt in die die Zeilennummer eingelesen wird sondern von einer Spalte deiner Listbox. Dort muss zum jeweiligen Datensatz die entsprechende Zeilennummer mit eingelesen werden.
Da du deine Listbox mit Additem befüllst, kannst du nur maximal 10 Spalten in einer Listbox ansprechen, mehr geht nicht.
Das heißt: Wenn die Zeilennummer in eine Spalte der Listbox rein soll, dann müsste irgendeine Spalte der Listbox frei gemacht werden - sprich dort kannst du dann keine Daten aus der Tabelle mehr anzeigen.
Gruß Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige