Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Spalten eines Listview verschieben?!

Spalten eines Listview verschieben?!
06.04.2005 12:23:14
Andre
Hi zusammen,
ich weiß, ich weiß, ListView ist kein Excel-Steuerelement, aber dennoch spreche ich mein Listview über VBA an. Also, bitte keine Antworten wie "Das gehört hier nicht hin!", danke. (Sorry, aber hab ich des öfteren zu diesem Thema in der Recherche gelesen.)
Ich gebe dem User mit der Eigenschaft ´ListView1.AllowColumnReorder` die Möglichkeit, die Spalten zu verschieben.
Nun würde ich gern diese Einstellung "speichern" (sprich in einen Array, Zelle, Variabel, sonstwohin). Das stellt dann kein Problem dar.
Leider verändert sich aber der Index der Spalten nicht mit dem Verschieben und somit ist sowohl der Index als auch der Text der Spalten beim Auslesen unverändert!
Range("H1").ClearContents
For k = 1 To ListView1.ColumnHeaders.Count
If k = 1 Then
Range("H1").Value = ListView1.ColumnHeaders(k).Text
Else
Range("H1").Value = Range("H1").Value & "," & ListView1.ColumnHeaders(k).Text
End If
Next
Weiß jemand Rat, mit welcher Eigenschaft ich die momentane Position der Spalten auslesen kann?
Gruß Andre
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten eines Listview verschieben?!
06.04.2005 13:41:34
K.Rola
Hallo,
so z.B.:

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
MsgBox ColumnHeader.Position
End Sub

Gruß K.Rola
AW: Spalten eines Listview verschieben?!
06.04.2005 13:54:20
Andre
Hi K.Rola,
so einfach kann´s sein! Manchmal sollte man einfach einfach denken!
Danke, bis bald.
Gruß Andre
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Spalten eines ListView in Excel VBA verschieben und speichern


Schritt-für-Schritt-Anleitung

  1. Aktiviere die Eigenschaft für das Verschieben der Spalten: Setze die Eigenschaft ListView1.AllowColumnReorder auf True. Dies ermöglicht es dem Benutzer, die Spalten im ListView zu verschieben.

    ListView1.AllowColumnReorder = True
  2. Verwende das ColumnClick-Ereignis: Erstelle ein Ereignis, um die Position der Spalten zu speichern, sobald eine Spalte angeklickt wird. Hier ist ein Beispiel, wie du das umsetzen kannst:

    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
       MsgBox ColumnHeader.Position
    End Sub
  3. Speichere die Spaltenüberschriften: Nutze eine Schleife, um die Spaltenüberschriften in eine Zelle oder ein Array zu speichern:

    Range("H1").ClearContents
    For k = 1 To ListView1.ColumnHeaders.Count
       If k = 1 Then
           Range("H1").Value = ListView1.ColumnHeaders(k).Text
       Else
           Range("H1").Value = Range("H1").Value & "," & ListView1.ColumnHeaders(k).Text
       End If
    Next
  4. Teste die Funktionalität: Verschiebe die Spalten im ListView und überprüfe, ob die Position korrekt gespeichert wird.


Häufige Fehler und Lösungen

  • Problem: Die Spaltenposition wird nicht richtig ausgelesen.

    • Lösung: Stelle sicher, dass du das ColumnClick-Ereignis korrekt verwendest. Prüfe, ob ColumnHeader.Position die aktuelle Position zurückgibt.
  • Problem: Excel stürzt ab oder reagiert nicht.

    • Lösung: Überprüfe deinen VBA-Code auf Schleifen oder rekursive Aufrufe, die zu einer Endlosschleife führen könnten.

Alternative Methoden

Eine alternative Methode besteht darin, die Spaltenüberschriften in einem Array zu speichern, anstatt sie direkt in eine Zelle zu speichern. Hier ist ein Beispiel:

Dim headers() As String
ReDim headers(1 To ListView1.ColumnHeaders.Count)

For k = 1 To ListView1.ColumnHeaders.Count
    headers(k) = ListView1.ColumnHeaders(k).Text
Next k

Diese Methode ermöglicht eine flexiblere Handhabung der Daten, beispielsweise für spätere Verarbeitungen oder zum Speichern in einer Datenbank.


Praktische Beispiele

Angenommen, du hast ein ListView mit den Spalten "Name", "Alter" und "Beruf". Der folgende Code speichert die Spaltenüberschriften in Zelle H1:

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    Dim i As Integer
    Range("H1").ClearContents
    For i = 1 To ListView1.ColumnHeaders.Count
        If i = 1 Then
            Range("H1").Value = ListView1.ColumnHeaders(i).Text
        Else
            Range("H1").Value = Range("H1").Value & "," & ListView1.ColumnHeaders(i).Text
        End If
    Next i
End Sub

Tipps für Profis

  • Überlege, ob du die Spaltenpositionen in einer benutzerdefinierten Datenstruktur speichern möchtest, um sie später einfacher wiederherstellen zu können.
  • Nutze das ListView-Steuerelement in Kombination mit anderen Excel-Funktionen, um leistungsstarke Dashboards zu erstellen.
  • Teste deinen VBA-Code Schritt für Schritt mit dem Debugger, um Fehler schneller zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich die Spaltenreihenfolge nach dem Speichern wiederherstellen? Du kannst die gespeicherten Spaltenüberschriften in einer ähnlichen Weise zurück in das ListView einfügen, indem du die ListView1.ListItems-Eigenschaft verwendest.

2. Ist das ListView-Steuerelement in allen Excel-Versionen verfügbar? Das ListView-Steuerelement ist in Excel-Versionen verfügbar, die VBA unterstützen, insbesondere ab Excel 97 und später. Achte darauf, dass du die richtige Version von MSComctlLib verwendest.

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