16 Stimmen

Wie kann man eine Excel-Listbox reparieren, die das letzte Element nicht in die Ansicht blättern kann?

Ein Killerproblem, das ich in Excel-UIs habe, solange ich mich erinnern kann, ist das Scrollen in Listboxen.

Wenn Sie mehr Elemente in einer Listbox haben, als angezeigt werden können, wird eine Bildlaufleiste eingeblendet. Wenn Sie die Leiste ganz nach unten scrollen und dann loslassen, "springt" die Leiste unter bestimmten Umständen eine Stufe nach oben, so dass Sie das letzte Element in der Liste nicht mehr sehen können. Dies wird hier veranschaulicht: Can't scroll all the way down

Es gibt viele Forenbeiträge zu diesem Problem, und die Lösung lautete immer: "Setzen Sie die Eigenschaft "Integrale Höhe" auf "false", und setzen Sie sie dann wieder auf "true". Was dies tut, ist leicht die Größe der Listbox, so dass es die Höhe auf die Höhe einer einzelnen Zeile gerundet ist, und dann keine Elemente ausgeblendet bleiben.

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
End With

Es gibt jedoch bestimmte Fälle, in denen dies nicht funktioniert. Wenn Sie sind:

  1. Programmgesteuertes Einstellen der Höhe der Listbox
  2. NO mit einfacher Listbox-Auswahl (fmMultiSelectSingle)

Dann einfach Einstellung integraler Höhe auf false und dann true nach oder zwischen Änderungen an der Höhe wird eine Anpassung an die Höhe der Listbox zu machen, aber wenn Sie gehen, um nach unten zu scrollen, wird das Problem bleiben - das letzte Element nicht gesehen werden kann.

Der Schlüssel zu dieser frustrierenden Frage ist, dass, während alle anderen im Internet bestätigen, dass die "integralHeight"-Lösung für sie funktioniert, diese sehr speziellen Fälle frustriert sind und sich fragen, warum es bei ihnen nicht funktioniert. Wie bekommen sie also ihr Problem in den Griff?

18voto

Alain Punkte 25558

Etwas, das ich für mich selbst entdecken musste und das nirgendwo sonst zu finden ist (deshalb poste ich es hier), ist, dass dieses Problem die zusätzliche Dimension der Abhängigkeit von der Auswahlmethode hatte. Ich kann mir zwar nicht erklären, wie die Funktionsweise der Bildlaufleiste nicht nur mit der Eigenschaft height und integral height, sondern auch mit der Eigenschaft .MultiSelect zusammenhängt, aber ich habe festgestellt, dass es so ist.

Wenn die oben gezeigte Methode .IntegralHeight nicht funktioniert, kann die folgende Methode Abhilfe schaffen:

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
    .MultiSelect = fmMultiSelectSingle
    .MultiSelect = fmMultiSelectExtended
End With

Durch einfaches Ändern der Eigenschaft .MultiSelect in fmMultiSelectSingle und anschließendes Wiederherstellen des gewünschten Auswahlstils wird die Höhe des Listenfelds automatisch durch die Eigenschaft .IntegralHeight auf eine etwas andere Höhe angepasst, als wenn diese Aktionen nicht durchgeführt werden - der Unterschied führt dazu, dass die Bildlaufleiste korrekt funktioniert:

Workaround worked

Ich hoffe, dass die Entdeckung dieses Sonderfalls und die präzisere Abhilfe jemandem die Stunden der Frustration und des Experimentierens erspart, die ich durchmachen musste.

6voto

SJJo Punkte 61

Ich weiß, dies ist ein sehr alter Beitrag. aber ich habe eine Menge durchgemacht, um dieses Problem zu beheben, also möchte ich einfach meinen Tipp teilen :)

Zunächst einmal, Die Methode integralheight funktioniert nicht, wenn die Zoomstufe des Arbeitsblatts nicht 100 % beträgt.

ändert sich die Höhe und Breite des Listenfelds, die Position usw. (auch wenn Sie die Objekteigenschaft "wird nicht mit der Zelle verschoben oder neu skaliert" einstellen)

und wenn Sie versuchen, die ursprüngliche Größe und Position mit dem entsprechenden Code wiederherzustellen, ist das letzte Element nicht mehr zu sehen

Mein Tipp ist einfach. es gibt eine Kombination zwischen Schriftgröße und Höhe der Listbox.

wenn Ihre Schriftgröße 6-10 (Arial, Regular), Listbox Höhe geht gut mit Vielfachen von 12,75 (btw meine Liste Box Stil ist 1: ListStyle, 1-fmListStyleOption. es könnte anders sein mit Stil 0)

Solange die Höhe mit diesen Vielfachen von 12,75 übereinstimmt, gibt es keine Probleme.

im Falle der Schriftgröße 12 (arial, regular) ist es ein Vielfaches von 13,55

Wenn es also keine Beschränkungen für die Größe der Listbox in Ihrem Projekt gibt, können Sie die Größe der Listbox einfach leicht an die Schriftgröße anpassen :)

3voto

David Pesetsky Punkte 224

Ich musste die Position verankern, da meine ListBox über die Seite lief:

With ListBox1 
 .IntegralHeight = False
 .IntegralHeight = True
 .Height = 45
 .Width = 69
 .Top = 0
 .Left = 1255.5
End With

3voto

mayur2j Punkte 141

With lstbox

`.Height = myHeight`
`.MultiSelect = fmMultiSelectExtended`
`.MultiSelect = fmMultiSelectSingle`

End With

Das hat bei mir funktioniert. Keine Notwendigkeit der Einstellung Integral Höhe Eigenschaft

1voto

miyatto Punkte 11

In meinem Fall war die Lösung diese Methode:

with listbox
   .IntegralHeight = False
   .Height = myHeight
   .Width = myWidth
   .IntegralHeight = True
   .Height = myHeight
   .Width = myWidth
end with

Viel Spaß!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X