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

Listbox Markierte Zeile Anzeigen

Forumthread: Listbox Markierte Zeile Anzeigen

Listbox Markierte Zeile Anzeigen
26.02.2022 05:35:19
oraculix
Hallo Alle!
In meiner Userform habe ich eine einzeilige Listbox und darunter 1 Bild.
Dank Daniel kann ich die Listbox bei Bedarf mit der rechten Maus runterziehen also beliebig vergrößern.
Wenn ich auf das darunterliegende Bild klicke wird es auch in der Listbox angezeigt und markiert.
Aber wenn ich jetzt die Listbox mit der rechten Maus auf eine Zeile verkleinere, wird mir der markierte Eintrag nicht gezeigt. Dieser markierte Eintrag befindet sich unter der ersten Zeile in der Listbox.
Frage:
Wir kann ich der Listbox sagen das sie mir die markierte Zeile anzeigt wenn ich nur eine Zeile habe?
Also die Listbox soll nach oben scrollen in die Sichtbare Zeile
Name der Listbox=Lst_Treffer
'Mit rechter Maus ListBox nach unten oder oben ziehen

Private Sub Lst_Treffer_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Static Yalt As Single
If Button = 2 Then
If Yalt  0 Then
Lst_Treffer.Height = WorksheetFunction.Max(10, Lst_Treffer.Height + (Y - Yalt))
End If
Yalt = Y
End If
End Sub
Gruß
Oraculix
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 08:34:13
Oberschlumpf
Hi,
such mal in google nach diesem Text:
vba listbox markierung oben
Ciao
Thorsten
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 09:59:59
oraculix
Danke für Deine Antwort da habe ich schon gesucht und sehr viel herumprobiert hat aber alles nix genutzt.
Gruß
Oraculix
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 14:59:05
Oberschlumpf
ähhh?
Guckst du:
Userbild
gleich der 1. Treffer ist dein Treffer, in dem du die richtigen Befehle sehen kannst, die dich zu deinem Wunschziel bringen.
Ja, du kannst den dort gezeigten Code natürlich nicht 1:1 übernehmen, musst selbst ein bisschen nachdenken und entsprechend anpassen, aber ich bin sicher, auch du würdest das schaffen...
Anzeige
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 15:11:36
oraculix
Danke das hab ich schon verucht!
Lst_Treffer.Selected(intPos - 1) = True
Lst_Treffer.TopIndex = intPos - 1
Das bringt gar nichts der Markierte Eintrag bleibt unsichtbar
'Listbox per ToogleButton groß oder kleiner machen

Private Sub ToggleButton1_Click()
Dim intPos As Integer
If ToggleButton1.Value = -1 Then
Lst_Treffer.Height = 170
Else
Lst_Treffer.Height = 13
Call UserForm_Initialize 'das hilft erst nach dem ich auf das Bild klicke
Repaint
End If
End Sub
Gruß
Oraculix
Anzeige
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 15:17:44
Oberschlumpf
tja, dann weiß ich auch nich weiter...ich hatte den Code ja selbst getestet, für mich entsprechend "umgestrickt" - und - ja, die per Code markierte Zeile in der Listbox wird dann in der Testlistbox (mit nur 4 sichtbaren, aber 100 enthaltenen Zeilen) nach oben an die oberste Stelle in der Listbox verschoben...auch alles per Code
ich wünsch dir weiter viel Erfolg!
Anzeige
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 13:23:33
Mullit
Hallo,

In meiner Userform habe ich eine einzeilige Listbox und darunter 1 Bild.
Dieser markierte Eintrag befindet sich unter der ersten Zeile in der Listbox.
Das wirkt irgendwie widersprüchlich, best. auch für andere...lad also am besten ne Bsp.-mappe hoch...;-)
Gruß, Mullit
Anzeige
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 14:51:58
oraculix
Hallo Danke für Deine Antwort!
Ich verstehe zwar nicht wo Du einen Wiederspruch siehst aber versuche es nochmal zu Erklären da es unmöglich ist diese Arbeitsmappe hochzuladen ( kb300 )
Nachdem ich die Listbox wieder auf 1 Zeile mit der rechten Maus verkleinere ist die Markierte Zelle
schon Verschwunden .Die Markierung in der Listbox befindet sich irgendwo darunter . Also nicht mehr sichtbar für mich.
Ich habe mittlerweile Call UserForm_Initialize in den untenstehen Code eingefügt.
Und es funktioniert fast zu 99%.
Erst wenn ich ein Bild anklicke habe ich 100% und die markierte Zeile ist wieder sichtbar und bleibt auch sichtbar. Geht also nicht weiter nach unten wenn ich ein Bild anklicke.
Hier der VBA Code der das nächste Bild lädt!
' Klick auf Imagr24 in Userform1 zeigt nächstes Bild

Private Sub Image24_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Lst_Treffer.ListIndex 
Gruß
Oraculix
Anzeige
AW: Listbox Markierte Zeile Anzeigen
26.02.2022 15:34:49
Mullit
Hallo,
ohne Bsp.-mappe (u. meinen Anwalt...) sag ich nix mehr....;-)
Gruß, Mullit
So Arbeitsmappe hochgeladen!
26.02.2022 16:17:46
oraculix
Danke
Ok habe jetzt die Arbeitsmappe hochgeladen die Bilder nicht.
https://www.herber.de/bbs/user/151420.xlsm
Öffne die Userform und klick oben auf den Pfeil .
Die Listbox wird vergrößert.
Wähle einen beliebigen Film mit der linken Maus und das Bild unten wird Angezeigt(Das Blid kannst natürlich nicht sehen wegen 300kb Beschränkung).
Klick nun wieder auf den Pfeil ganz oben die Listbox wird auf eine Zeile reduziert.
Klick nun auf ein leeres Bild .
Man kann deutlich sehen das der Falsche Bildname in der Listbox angezeigt wird.
Hoffe Du verstehst mich jetzt.
Gruß
Oraculix
Anzeige
AW: So Arbeitsmappe hochgeladen!
26.02.2022 16:39:34
Oberschlumpf
Hi,
guckst du:
https://www.herber.de/bbs/user/151421.xlsm
Nein, sorry, ich habe dir den passenden Code - nicht "vorgekaut"
Ich hab nur an passender Stelle einen Kommentar hinzugefügt, was du dort tun musst.
Kannst von mir denken, was du möchtest, aber anhand deiner Beiträge hab ich schon sehr oft miterlebt, wie du selbst nicht so mitdenken magst, sondern dir viel lieber jeden einzelnen Schritt! von einem von uns diktieren lassen möchtest.
Ja, ich sehe, dass du in VBA noch nicht so viel Ahnung hast; aber es bleibt bei Basiskenntnissen, wenn du nich endlich selbst anfängst, dir Gedanken zu machen!
Und auch ich helf dir ja gern. Ich verrate dir, was genau du wo genau programmieren musst, aber erstellen musst du den Code schon alleine...und ich weiß...du schaffst das! - du schreibst ja selbst in einem anderen deiber Beiträge, dass ich dir immer wieder eine geniale Hilfe bin...
Ciao
Thorsten
Anzeige
Es funktioniert nicht!!!
26.02.2022 17:20:38
oraculix
Hallo Danke für den Versteckten Tipp.
Aber ich bekomme es nicht hin
'Lst_Treffer.Selected = Index Lst_Treffer.TopIndex gescheitert
Lst_Treffer.ListIndex = Lst_Treffer.TopIndex 'tut sich nichts

Private Sub ToggleButton1_Click()
'Listbox per ToogleButton groß oder kleiner machen
Dim intPos As Integer
If ToggleButton1.Value = -1 Then
Lst_Treffer.Height = 170
Else
Lst_Treffer.Height = 13
'HIER, wenn die Listbox verkleinert wird, MUSST DU Lst_Treffer.ListIndex ZUM Lst_Treffer.TopIndex MACHEN!
'Lst_Treffer.Selected = Index Lst_Treffer.TopIndex gescheitert
Lst_Treffer.ListIndex = Lst_Treffer.TopIndex 'tut sich nichts
Repaint
End If
End Sub
Gruß
Oraculix
Anzeige
AW: Es funktioniert nicht!!!
26.02.2022 17:37:06
Daniel
Hi
TopIndex ist die Indexnummer der Listboxzeile, die an erster Stelle angezeigt wird.
Müsste es dann nicht:

Listbox1.TopIndex = Listbox1.ListIndex 
lauten, um die selektierte Zeile an die oberste Stelle zu bringen?
du hast das hier anders rum.
So zumindest für die SingelSelect-Listbox. Bei Multiselect funktioniert der ListIndex nicht richtig, daher müsstest du mit einer Schleife über die Liste gehen und prüfen, was selektiert ist:

for i = 0 to Listbox1.ListCount - 1
if Listbox1.Selected(i) then exit for
next
if i 
Gruß Daniel
Anzeige
AW: Es funktioniert nicht!!!
26.02.2022 17:59:28
oraculix
Servus Daniel Velen Dank!
'Lst_Treffer.TopIndex = Lst_Treffer.ListIndex'Funktioniert nur 1mal nach Bild klick ist er wieder nicht sichtbar
Variante 2 kommt ein Fehler Varaible nicht definiert!

Private Sub ToggleButton1_Click()
If ToggleButton1.Value = -1 Then
Lst_Treffer.Height = 170
Else
Lst_Treffer.Height = 13
'Lst_Treffer.TopIndex = Lst_Treffer.ListIndex'Hunktioniert nur 1mal nach Bild klick ist er wieder nicht sichtbar
For i = 0 To Lst_Treffer.ListCount - 1
If Lst_Treffer.Selected(i) Then Exit For
Next
If i 
Gruß
Oraculix
Anzeige
Danke Daniel Erledigt!
26.02.2022 18:11:05
oraculix
Super Du hast mir den richtigen Weg gezeigt Vielen Dank!
Lst_Treffer.TopIndex = Lst_Treffer.ListIndex habe ich in den untenstehenden Code eingetragen und es geht jetzt.
' Klick auf Imagr24 in Userform1 zeigt nächstes Bild

Private Sub Image24_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Lst_Treffer.ListIndex 
Gruß
Oraculix
Anzeige
AW: Es funktioniert nicht!!!
26.02.2022 17:53:46
Oberschlumpf
Hi,
Lst_Treffer.ListIndex = Lst_Treffer.TopIndex
genau SO WAS meine ich mit mitdenken! :-/
Du willst doch, dass TOPIndex einen Wert erhält - wieso versuchst du dann, den Wert von TOPIndex an wen anders zu übergeben, anstatt, dass du mit ...TOPIndex = ... etwas zuweist?
Ciao
Thorsten
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox Markierte Zeile Anzeigen in VBA


Schritt-für-Schritt-Anleitung

Um die markierte Zeile in einer einzeiligen Listbox anzuzeigen, musst du den TopIndex der Listbox korrekt einstellen, wenn die Listbox verkleinert wird. Hier sind die Schritte:

  1. Öffne Deine Userform im VBA-Editor.
  2. Stelle sicher, dass Deine Listbox den Namen Lst_Treffer trägt.
  3. Füge die folgende VBA-Prozedur in den Code deiner Userform ein:
Private Sub ToggleButton1_Click()
    If ToggleButton1.Value = -1 Then
        Lst_Treffer.Height = 170
    Else
        Lst_Treffer.Height = 13
        ' Setze den TopIndex auf den ListIndex
        Lst_Treffer.TopIndex = Lst_Treffer.ListIndex
        Repaint
    End If
End Sub

Mit diesem Code wird sichergestellt, dass die markierte Zeile immer sichtbar bleibt, wenn die Listbox verkleinert wird.


Häufige Fehler und Lösungen

  • Fehler: Markierte Zeile bleibt unsichtbar

    • Lösung: Stelle sicher, dass Du den TopIndex der Listbox entsprechend dem ListIndex setzt, wie im obigen Code gezeigt.
  • Fehler: Variable nicht definiert

    • Lösung: Überprüfe, ob Du alle Variablen korrekt deklariert hast und dass Du den richtigen Scope verwendest.

Alternative Methoden

Eine alternative Methode zur Anzeige der markierten Zeile könnte die Verwendung eines Scrollbars sein, um die Listbox zu navigieren. Du kannst auch die MouseMove-Ereignisse nutzen, um den TopIndex dynamisch anzupassen:

Private Sub Lst_Treffer_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 2 Then
        Lst_Treffer.TopIndex = Lst_Treffer.ListIndex
    End If
End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du eine Listbox mit mehreren Einträgen füllen kannst:

Private Sub UserForm_Initialize()
    Lst_Treffer.AddItem "Eintrag 1"
    Lst_Treffer.AddItem "Eintrag 2"
    Lst_Treffer.AddItem "Eintrag 3"
    Lst_Treffer.AddItem "Eintrag 4"
    Lst_Treffer.AddItem "Eintrag 5"
End Sub

Das Beispiel zeigt, wie Du beim Initialisieren der Userform Daten in die Listbox einfügen kannst.


Tipps für Profis

  • Nutze die ListCount-Eigenschaft, um dynamisch zu überprüfen, wie viele Einträge in der Listbox vorhanden sind.
  • Verwende ListIndex und TopIndex in Kombination, um eine optimale Benutzererfahrung zu schaffen.
  • Experimentiere mit Events wie Click oder MouseDown, um die Interaktivität der Userform zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die Listbox in VBA anpassen? Du kannst die Eigenschaften der Listbox im Eigenschaftenfenster im VBA-Editor ändern. Dazu gehören Größe, Farbe und Schriftart.

2. Was mache ich, wenn der Code nicht funktioniert? Überprüfe alle Variablen, achte darauf, dass die Listbox korrekt benannt ist, und stelle sicher, dass Du die richtige Excel-Version verwendest.

3. Wie kann ich mehrere Einträge in der Listbox auswählen? Setze die MultiSelect-Eigenschaft der Listbox auf fmMultiSelectMulti, um mehrere Einträge auszuwählen.

4. Was ist der Unterschied zwischen ListIndex und TopIndex? ListIndex gibt den Index des aktuell ausgewählten Eintrags zurück, während TopIndex den Index des ersten sichtbaren Eintrags in der Listbox darstellt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige