Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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 - Platzierung

ListBox - Platzierung
16.01.2020 09:50:12
Rainer
Hallo!
Ich bräuchte mal einen Rat für die Platzierung einer ListBox. Folgende Situation:
In mehreren Zeilen einer Excel-Datei gibt es für den Anwender einen Button, mit dem er Zusatzdaten abrufen kann, die in einer ListBox angezeigt werden sollen. Im Prinzip funktioniert das auch alles einwandfrei, die ListBox wird sauber gefüllt und angezeigt. Nur mit der Stelle wo sie erscheint hapert es. Die Spaltenausrichtung passt, von der Zeilenausrichtung soll die Oberkante der Listbox mit der Oberkante der Zeile übereinstimmen, für die sie aufgerufen wurde. Was passiert ist:
- Die ListBox erscheint ausgerichtet auf die Zeile, für die man zuvor eine ListBox aufgerufen hat.
- ==> Schließt man die ListBox und ruft sie für die gleiche Zeile erneut auf erscheint sie richtig.
- War zuvor keine ListBox aufgerufen, erscheint die ListBox in Zeile 1.
Hier das Macro:

Sub deflistbox()
LC = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
LBname = "ListBox_WBS"
' lösche Listbox wenn bereits existent
If Range("AD1").Value  "" Then
ActiveSheet.OLEObjects(LBname).Delete
If Range("AD1").Value = LC Then
' schließe Listbox und beende Sub
Range("AD1").Value = ""
Exit Sub
End If
End If
' Definiere ListBox
Dim objOLE As OLEObject
Set objOLE = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False,  _
DisplayAsIcon:=False, Left:=5, Top:=Cells(LC, 1).Top, Width:=530, Height:=97.5)
With objOLE
.Name = LBname
.Visible = False
.Object.ListStyle = fmListStyleOption
.Object.MultiSelect = fmMultiSelectMulti
.Object.MatchEntry = fmMatchEntryComplete
.Object.Locked = False
.Object.ColumnCount = 8
.Object.BoundColumn = 1
.Object.ColumnWidths = "15; 125; 45; 45; 100; 100; 260; 0"
End With
' hier wird normalerweise die ListBox gefüllt
' zeige ListBox
ActiveSheet.OLEObjects(LBname).Visible = True
ActiveSheet.OLEObjects(LBname).Activate
Set objOLE = Nothing
Range("AD1").Value = LC
' Anzeige justieren
ActiveWindow.ScrollRow = LC
End Sub

In LC muss eigentlich die richtige Zeilennummer stehen, da die Nummer in Zelle AD1 sichtbar ist und auch richtig gescrollt wird. Kann mir jemand erklären, warum aber die Platzierung der ListBox erst beim zweiten Versuch gelingt?
PS: Ein Testfile mit der Struktur ohne Daten ist verfügbar: https://www.herber.de/bbs/user/134445.xlsm

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBox - Platzierung
16.01.2020 10:24:02
Nepumuk
Hallo Rainer,
kann ich nicht bestätigen. Das funktioniert bei mir auf Anhieb. Ich habe Excel 2013 32 Bit.
Gruß
Nepumuk
AW: ListBox - Platzierung
16.01.2020 10:54:33
Rainer
Hallo Nepumuk,
das ist seltsam. Ich habe die Testdatei extra nochmal auf einem anderen PC ausprobiert und der zeigte den gleichen Effekt. Hast du es es evtl. mit Zeile 18 versucht? Das war die Zeile mit der ich das Makro zuletzt aufgerufen hatte, daher funktionert es aktuell mit dieser Zeile direkt.
Gruß, Rainer
AW: ListBox - Platzierung
16.01.2020 13:57:54
Nepumuk
Hallo Rainer,
unverändert, funktioniert auf Anhieb. Hätte mich aber auch gewundert wenn es nicht ginge. Ich habe es nochmal auf Excel 2010 32Bit getestet, funktioniert wie vorgesehen.
Gruß
Nepumuk
Anzeige
AW: ListBox - Platzierung
19.01.2020 10:18:39
Rainer
Hallo Nepumuk,
mich hat das ja auch verwundert. Und der Effekt trat nicht nur bei mir, sondern auch bei Anwendern auf. Aber wohl nicht immer und/oder nicht bei allen. Ich kann es mir weiterhin nicht erklären. Habe vieles ausprobiert, z.B. zunächst den Wert in eine Variable gespeichert und dann diese in der Set-Anweisung angegeben. Habe es sogar zum Test mit einem festen Wert in der Set-Anweisung probiert und hatte diesen Effekt.
Ich hoffe aber, jetzt eine Lösung gefunden zu haben. Ich habe die Angaben Left, Top, Width und Height von der Set-Anweisung in die With-Anweisung verlagert. Zumindest bei mir funktioniert das sauber.
Dir vielen Dank für dein Feedback und den Test!
Gruß, Rainer
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige