___ qstnhdr ___ Hinzufügen von Kopfzeilen zu einer mehrspaltigen Listbox in einem Excel-Benutzerformular mithilfe von VBA
___ antwort22209020 ___
Ich habe gerade dieses Problem untersucht und diese Lösung gefunden. Wenn Ihre RowSource auf einen Zellbereich zeigt, werden die Spaltenüberschriften in einer mehrspaltigen Listbox aus den Zellen direkt über der RowSource übernommen.
Bei dem hier abgebildeten Beispiel erscheinen in der Listbox die Wörter Symbol und Name als Titel. Wenn ich das Wort Name in Zelle AB1 änderte, dann öffnete das Formular in der VBE erneut die Spaltenüberschriften.
Das Beispiel stammt aus einer Arbeitsmappe in VBA For Modelers von S. Christian Albright, und ich versuchte herauszufinden, wie er die Spaltenüberschriften in seine Listbox brachte:)
___ answer658887 ___
Nein. Ich erstelle Beschriftungen über der Listbox, die als Kopfzeilen dienen. Sie könnten denken, dass es ein königlicher Schmerz ist, die Etiketten jedes Mal zu ändern, wenn sich Ihre lisbox ändert. Du hättest Recht - es ist ein Schmerz. Es ist ein Schmerz, das erste Mal einzurichten, viel weniger Änderungen. Aber ich habe keinen besseren Weg gefunden.
___ answer41128255 ___
Es gibt eine sehr einfache Lösung, um Kopfzeilen am Anfang des Listenfelds mit mehreren Spalten anzuzeigen.
Ändern Sie einfach den Eigenschaftswert auf "wahr" für "Spaltenköpfe", was standardmäßig falsch ist.
Danach Erwähnen Sie einfach den Datenbereich in der Eigenschaft "rowsource" ohne Header aus dem Datenbereich und Header sollte in der ersten oberen Zeile des Datenbereichs sein, dann wird es automatisch die Überschrift auswählen und Header wird eingefroren.
Wenn Sie annehmen, dass Sie Daten im Bereich "A1: H100" und Kopfzeile bei "A1: H1" haben, dann ist der Datenbereich "A2: H100", was in der Eigenschaft "rowsource" zu erwähnen ist "und" columnheads "Perperty Wert sollte wahr sein
Grüße,
Asif Hameed
___ answer41149955 ___
Ich verwende den folgenden Ansatz für Header auf einer ComboBox, wo der CboBx nicht aus einem Arbeitsblatt geladen wird (Daten von SQL beispielsweise). Der Grund dafür, dass ich RowSource nicht von einem Arbeitsblatt aus anwähle, ist der, dass RowSource nur funktioniert, wenn Sie von einem Arbeitsblatt laden.
Das funktioniert für mich:
- Erstellen Sie Ihre ComboBox und erstellen Sie eine ListBox mit identischem Layout, aber nur einer Zeile.
- Platzieren Sie die ListBox direkt über der ComboBox.
- Laden Sie in Ihrer VBA ListBox row1 mit den gewünschten Headern.
-
Geben Sie in Ihrem VBA für die Aktion yourListBoxName_Click den folgenden Code ein:
%Vor%
-
Wenn Sie auf die Listbox klicken, wird die Combobox geöffnet und funktioniert normal, während die Überschriften (in der Listbox) über der Liste bleiben.
___ qstntxt ___
Ist es möglich, die Header in einer mehrspaltigen Listbox einzurichten, ohne einen Arbeitsblattbereich als Quelle zu verwenden?
Im Folgenden wird ein Array von Varianten verwendet, das der Listeneigenschaft der Listbox zugewiesen ist. Die Header werden leer angezeigt.
%Vor%
___ answer28760208 ___
Hier ist ein Ansatz, der das Erstellen von Beschriftungen über jeder Spalte einer Listbox (auf einem Arbeitsblatt) automatisiert.
Es wird funktionieren (wenn auch nicht super-hübsch!), solange es keine horizontale Bildlaufleiste in Ihrer Listbox gibt.
%Vor%
___ antwort43381634 ___
Hier ist mein Ansatz, um das Problem zu lösen:
Bei dieser Lösung müssen Sie ein zweites ListBox-Element hinzufügen und über das erste platzieren.
So:
Dann rufen Sie die Funktion CreateListBoxHeader auf, um die Ausrichtung zu korrigieren und Header-Elemente hinzuzufügen.
Ergebnis:
Code:
%Vor%
Verwendung:
%Vor%
___ answer16178684 ___
Eine weitere Variante der Antwort von Lunatik ist die Verwendung eines lokalen booleschen Werts und des change-Ereignisses, damit die Zeile bei der Initialisierung hervorgehoben, aber abgewählt und gesperrt werden kann, nachdem der Benutzer eine Auswahländerung vorgenommen hat:
%Vor%
Wenn das Listenfeld initialisiert wird, setzen Sie bHighlight und lbx.Selected (0) = True, wodurch die ausgewählte Kopfzeile initialisiert werden kann; Danach wird die erste Änderung aufgehoben und verhindert, dass die Zeile erneut ausgewählt wird ...
___ tag123excel ___ Nur für Fragen zur Programmierung von Excel-Objekten oder -Dateien oder zur Entwicklung komplexer Formeln. Sie können das Excel-Tag mit VBA, VSTO, C #, VB.NET, PowerShell, OLE-Automatisierung und anderen programmierbezogenen Tags und Fragen kombinieren, falls zutreffend.
Allgemeine Hilfe zu MS Excel für einzelne Arbeitsblattfunktionen ist bei Super User verfügbar.
___ tag123excelvba ___ Excel-VBA (Visual Basic für Applikationen für Microsoft Excel) ist die vorherrschende Programmiersprache für Microsoft Office Excel. Es ist eine ereignisgesteuerte und objektorientierte Programmiersprache zum Schreiben von Makros für Microsoft Office-Anwendungen wie Excel. Verwenden Sie diesen TAG NICHT für VB.NET Fragen.
___ tag123vba ___ Visual Basic für Applikationen (VBA) ist eine ereignisgesteuerte, objektorientierte Programmiersprache zum Schreiben von Makros, die für die gesamte Office-Suite und andere Anwendungen verwendet wird. VBA entspricht nicht VB.NET oder VBS; Wenn Sie in Visual Studio arbeiten, verwenden Sie [vb.net]. Wenn sich Ihre Frage speziell auf die Programmierung einer MS Office-Anwendung bezieht, verwenden Sie auch das entsprechende Tag: [Excel-VBA], [Zugriff-VBA], [Word-VBA], [Outlook-VBA] oder [Microsoft-Project-VBA] .
___ answer37868823 ___
Fügen Sie einfach Beschriftungen am Anfang der Listbox hinzu, und wenn Änderungen erforderlich sind, müssen Sie nur die Beschriftungen programmatisch ändern.
___ answer657542 ___
Einfache Antwort: Nein.
Was ich in der Vergangenheit getan habe, ist das Laden der Überschriften in Zeile 0 und dann das Setzen des ListIndex auf 0, wenn das Formular angezeigt wird. Dies hebt dann die "Überschriften" in Blau hervor, die wie eine Überschrift aussehen. Die Formularaktionsschaltflächen werden ignoriert, wenn der ListIndex auf Null bleibt, sodass diese Werte niemals ausgewählt werden können.
Sobald ein anderes Listenelement ausgewählt ist, verliert die Überschrift natürlich den Fokus, aber zu diesem Zeitpunkt ist ihre Aufgabe erledigt.
Wenn Sie so vorgehen, können Sie auch Überschriften verwenden, die horizontal scrollen. Dies ist schwierig / unmöglich mit separaten Beschriftungen, die über der Listbox schweben. Die Kehrseite ist, dass die Überschriften nicht sichtbar bleiben, wenn die Listbox vertikal scrollen muss.
Grundsätzlich ist es ein Kompromiss, der in den Situationen funktioniert, in denen ich bisher war.
___