PDA

Vollständige Version anzeigen : Listbox mit Daten befüllen


Osttirodler
01.09.2017, 11:21
Hallo,
ich hätte da mal eine kleine Frage:
ich möchte Daten von einer einer Exceltabelle Blatt 2 in meiner Listbox3 so anzeigen das der unterste Wert der Spalten als erstes in der Listbox (oben) angezeigt wird.
Problem, die Tabelle wird permanent gefüllt und es kommen neue datensätze hinzu. entsprechend soll es den aktuellsten immer oben als erste anzeigen...

hier mein Versuch, was ja auch soweit funktioniert, nur zeigts mir hier als erstes die Zeile 1 mit der Beschriftung an und danach natürlich den ältesten Wert in der Spalt - aufsteigend bis zum aktuellsten Wert.

Kurz noch, in der Listbox sollen die Spalte 1 und die Spalte 2 des Tabellenblatt2 (ws2) angezeigt werden...
--------------------------------------------
With Me.ListBox3
.List = ws2.Cells.CurrentRegion.Value
.ColumnCount = 2
.ColumnWidths = "3cm;2cm"
End With
--------------------------------------------
hat jemand evtl. ne idee?

Beverly
01.09.2017, 13:17
Hi,

da musst du schon in einer Schleife über alle Zellen von der letzten Zeile bis zur ersten laufen und die Daten per .AddItem in die ListBox eintragen. Sobald sich die Daten in der Tabelle ändern, musst du die ListBox neu mit Daten füllen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Osttirodler
01.09.2017, 13:52
autsch....
ok, das lass ich mal lieber dann, scheint mir etwas zu komplex...
gibts ne einfache Möglichkeit, die erste Zeil der spalten für die Listbox aus zu blenden?

danke trotzdem für den tip...

Beverly
01.09.2017, 14:09
Ermittle die letzte Zeile/Spalte und verwende dann anstelle ws2.Cells.CurrentRegion dieses:

ws2.Range(ws2.Cells(2, 1), ws2.Cells(letzteZeile, letzteSpalte))


Die letzte Zeile kannst du z.B. so ermitteln:

ws2.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row


und die letzte Spalte so:

ws2.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Storax
01.09.2017, 15:06
Mal spasseshalber so :D

Osttirodler
04.09.2017, 08:15
Hallo Beverly,

danke für deine Unterstützung.

nur bekomme ich fehler beim Kompilieren:
wenn ich deinen Code so verwende wie beschrieben, dann mekert VBA das .Row am ende von "ws2.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row"
an..


habs jetzt mal so hingebastelt bekomme es aber nicht zum laufen...
With Me.ListBox3
ws2.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ws2.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

.List = ws2.Range(ws2.Cells(2, 1), ws2.Cells(letzteZeile, letzteSpalte)).Value
.ColumnCount = 2
.ColumnWidths = "3cm;2cm"
end with

Osttirodler
04.09.2017, 08:20
hallo Storax,

dein Code funzt zwar in deinem XLS richtig geil, nur ...

wenn ich den für mich benutzte bekomme ich dann schier meine ganze gebastelte Maske um die Ohren geschlagen.
los gehts damit dass ich in meiner Excel VBA schon mit der Variablen "ws" arbeite und wenn ich deinen Code versuche zu integrieren dann mekert es mir schon mein "ws" an genauer gesagt nutze ich "ws2" als ausdruck für Tabelle 2... auf dessen sich auch diese Listbox3 bezieht und von der "ws2" ich die Listbox3 befülle.
dein Modul muss ich auch mit in Betracht ziehen?

Beverly
04.09.2017, 08:38
Hi,

du musst die Zeile/Spalte Variablen zuweisen:

Dim letzteZeile As Long
Dim letzteSpalte As Integer
letzteZeile = ws2.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
letzteSpalte = ws2.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
With Me.ListBox3
.List = ws2.Range(ws2.Cells(2, 1), ws2.Cells(letzteZeile, letzteSpalte)).Value
.ColumnCount = 2
.ColumnWidths = "3cm;2cm"
End With


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Storax
04.09.2017, 08:59
Lade Deine Datei hoch, dann kann ich das anpassen

Osttirodler
04.09.2017, 10:33
hier ... es geht um das listenfeld 3

Beverly
04.09.2017, 10:44
Hast du meinen Beitrag 04.09.2017, 09:38 gelesen?

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Osttirodler
04.09.2017, 11:02
ja habe ich,
hab es dann auch gleich ausprobiert aber irgendwas mag mich nicht, entweder läufts in nen Fehler rein oder es zeigt mir trotz des Codes als erstes den obersten anstatt den untersten eitrag an...
bin noch am Basteln... aber irgendwie... das knabbert am Siegeswillen :(

Fehlermeldung:
Laufzeitfehler '91':
Objektvariable oder With-Blockvariable nicht festgelegt..

Beverly
04.09.2017, 12:56
Und wo ist der Code? In deiner hochgeladenen Mappe gibt es nirgendwo einen Code, mit dem du die ListBox3 füllts und eine Zeile With Me.ListBox3 habe ich trotz Suchfunktion im gesamten Projekt nicht gefunden.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Osttirodler
04.09.2017, 13:02
hatte ic extra neutrall gesandt

Osttirodler
04.09.2017, 13:06
hier nochmal mit deinem eingebauten code

Beverly
04.09.2017, 13:12
Und wie löst man den Fehler aus? Die ListBox3 wird korrekt gefüllt, der Code löst dabei keinen Fehler aus.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Storax
04.09.2017, 14:56
Ich hatte ja geschrieben, spasseshalber :-)

Hier die Funktion, mit der ich so etwas wirklich machen würdeFunction ReverseArray(rgDat As Range) As Variant

Dim i As Long
Dim j As Long
Dim vDat As Variant
Dim rDat As Variant

Dim noRows As Long
Dim noCols As Long

vDat = rgDat

noRows = UBound(vDat)
noCols = UBound(vDat, 2)

ReDim rDat(1 To noRows, 1 To noCols)

For i = UBound(vDat) To LBound(vDat) Step -1
For j = LBound(vDat, 2) To UBound(vDat, 2)
rDat(noRows - i + 1, j) = vDat(i, j)
Next j
Next i

ReverseArray = rDat

End Function

Deinen Code musst Du dann wie folgt anpassen
With Me.ListBox3
'.List = ws2.Range(ws2.Cells(2, 1), ws2.Cells(letzteZeile, letzteSpalte)).Value
.List = ReverseArray(ws2.Range(ws2.Cells(2, 1), ws2.Cells(letzteZeile, letzteSpalte)))
.ColumnCount = 2
.ColumnWidths = "3cm;2cm"
End With

Osttirodler
05.09.2017, 06:23
Kommando Zurück!

ich habe den fehlerteufel gefunden.. und noch einen falschen Code mit in der Originaldatei..

Sauber! das funktioniert, dank euch beiden.
Meine Frage zum Verständnis für mich: wieso muss man das über ein zusätzliches Modul lösen?
und wieso zeigt es mir jetzt wieder beim klicken durch die jeweligen User in Textbox 25 das letzte eingegebene Ticket an? das hatte ich schon mal ... finde aber einmal mehr nicht warum das jetzt wieder auftraucht...
komisch auch dass das nur bei meiner Originaldatenbank und nicht bei meinem Dummy auftritt. habe bei beiden den identischen Code (dummy nehm ich zum Basteln) hmmm... habts Ihr ne idee?