Hinzufügen von Kopfzeilen zu einer mehrspaltigen Listbox in einem Excel-Benutzerformular mithilfe von VBA

8

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%     
vzczc 18.03.2009, 09:16
quelle

9 Antworten

13

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.

    
Dick Kusleika 18.03.2009, 15:54
quelle
5

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.

    
Lunatik 18.03.2009 09:29
quelle
5
___ 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:

  1. Erstellen Sie Ihre ComboBox und erstellen Sie eine ListBox mit identischem Layout, aber nur einer Zeile.
  2. Platzieren Sie die ListBox direkt über der ComboBox.
  3. Laden Sie in Ihrer VBA ListBox row1 mit den gewünschten Headern.
  4. Geben Sie in Ihrem VBA für die Aktion yourListBoxName_Click den folgenden Code ein:

    %Vor%
  5. 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.

    
___
Rick Henderson 05.03.2014 20:55
quelle
1

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

    
Asif Hameed 13.12.2016 18:38
quelle
1

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:

  1. Erstellen Sie Ihre ComboBox und erstellen Sie eine ListBox mit identischem Layout, aber nur einer Zeile.
  2. Platzieren Sie die ListBox direkt über der ComboBox.
  3. Laden Sie in Ihrer VBA ListBox row1 mit den gewünschten Headern.
  4. Geben Sie in Ihrem VBA für die Aktion yourListBoxName_Click den folgenden Code ein:

    %Vor%
  5. 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.

RR_CodeSlinger 14.12.2016 18:47
quelle
1
___ 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:

  1. Erstellen Sie Ihre ComboBox und erstellen Sie eine ListBox mit identischem Layout, aber nur einer Zeile.
  2. Platzieren Sie die ListBox direkt über der ComboBox.
  3. Laden Sie in Ihrer VBA ListBox row1 mit den gewünschten Headern.
  4. Geben Sie in Ihrem VBA für die Aktion yourListBoxName_Click den folgenden Code ein:

    %Vor%
  5. 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.

    
___
Jonas_Hess 13.04.2017 00:21
quelle
0

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 ...

    
ChE Junkie 23.04.2013 20:33
quelle
0

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%     
Tim Williams 27.02.2015 08:06
quelle
0

Fügen Sie einfach Beschriftungen am Anfang der Listbox hinzu, und wenn Änderungen erforderlich sind, müssen Sie nur die Beschriftungen programmatisch ändern.

    
Jim 16.06.2016 20:31
quelle

Tags und Links